ドライバーのPythonバージョンをSparkに設定するにはどうすればよいですか?


88

私はspark1.4.0-rc2を使用しているので、sparkでpython3を使用できます。export PYSPARK_PYTHON=python3.bashrcファイルに追加すると、Python 3を使用してSparkをインタラクティブに実行できます。ただし、スタンドアロンプ​​ログラムをローカルモードで実行すると、エラーが発生します。

Exception: Python in worker has different version 3.4 than that in driver 2.7, PySpark cannot run with different minor versions

ドライバーのPythonのバージョンを指定するにはどうすればよいですか?設定export PYSPARK_DRIVER_PYTHON=python3が機能しませんでした。

回答:


34

起動するスタンドアロンプ​​ロジェクトがPython3で起動されていることを確認する必要があります。spark-submitを介してスタンドアロンプ​​ログラムを送信する場合は正常に動作するはずですが、pythonで起動する場合は、必ずpython3を使用して起動してください。あなたのアプリ。

また、env変数がに設定されていることを確認してください./conf/spark-env.sh(存在しない場合はspark-env.sh.template、ベースとして使用できます)。


3
@ Kevin-同じ問題が発生しています。spark-evn.shで行った変更に関する解決策を投稿してください。
Dev Patel 2015年

1
これは、を変更する代わりに、PATH変数をSparkに誘導する正しい方法です.bashrc
CᴴᴀZ

なぜPython3を使用する必要があるのですか@Holden?
ジャージー2016

Sparkはpython2で実行できますが、この場合、ユーザーは質問でpython3を指定しようとしていました。どちらのPythonバージョンでも、一貫して実行する必要があります。
ホールデン

83

python3への設定PYSPARK_PYTHON=python3PYSPARK_DRIVER_PYTHON=python3両方が私のために働きます。.bashrcでexportを使用してこれを行いました。結局、これらは私が作成する変数です:

export SPARK_HOME="$HOME/Downloads/spark-1.4.0-bin-hadoop2.4"
export IPYTHON=1
export PYSPARK_PYTHON=/usr/bin/python3
export PYSPARK_DRIVER_PYTHON=ipython3
export PYSPARK_DRIVER_PYTHON_OPTS="notebook"

また、このチュートリアルに従って、Ipython3ノートブック内から機能させるようにしました:http://ramhiser.com/2015/02/01/configuring-ipython-notebook-support-for-pyspark/


5
「IPYTHON = 1」オプションに関連するspark2.1でエラーが発生しました。エラーメッセージは、「IPYTHONとIPYTHON_OPTSはSpark 2.0以降で削除されました。これらを環境から削除し、代わりにPYSPARK_DRIVER_PYTHONとPYSPARK_DRIVER_PYTHON_OPTSを設定してください。」です。
notilas 2017年

1
PYSPARK_PYTHON=python3ワーカーのPythonバージョンを設定しますよね?
ジョー

PyCharmから実行している場合は、PYSPARK_PYTHON=python3; PYSPARK_DRIVER_PYTHON=ipython3[実行]> [構成の編集]> {your_run_config}> [環境変数]に追加します。これらをすべての実行構成のデフォルトにするには、[実行]> [構成の編集]> [テンプレート
MisterEd

28

私の場合に役立ちました:

import os

os.environ["SPARK_HOME"] = "/usr/local/Cellar/apache-spark/1.5.1/"
os.environ["PYSPARK_PYTHON"]="/usr/local/bin/python3"

1
これは、PYSPARK_DRIVER_PYTHONをPYSPARK_PYTHONと同じ値に設定した後に機能します。
buxizhizhoum 2018

12

./conf/spark-env.shファイルに適切な環境変数を設定することで、ドライバーのPythonのバージョンを指定できます。まだ存在していない場合spark-env.sh.templateは、他の多くの変数も含まれている提供されたファイルを使用できます。

spark-env.sh関連するPython環境変数を設定するファイルの簡単な例を次に示します。

#!/usr/bin/env bash

# This file is sourced when running various Spark programs.
export PYSPARK_PYTHON=/usr/bin/python3       
export PYSPARK_DRIVER_PYTHON=/usr/bin/ipython

この場合、ワーカー/エグゼキューターが使用するPythonのバージョンをPython3に設定し、PythonのドライバーバージョンをiPythonに設定して、より適切なシェルを動作させます。

あなたはまだ持っていない場合はspark-env.sh、ファイルを、他の変数を設定する必要はありません、これは、関連するPythonのバイナリへのパスが(と検証正しいと仮定して、あなたが欲しいものを行う必要がありますwhich)。私も同様の問題を抱えていましたが、これで修正されました。


このファイルを実行する方法は?
volatil3 2017年

spark-env.sh.templateの名前をspark-env.shに変更してから、ファイルの末尾にexport PYSPARK_PYTHON = / usr / local / bin / python3 export PYSPARK_DRIVER_PYTHON = / usr / local / bin / python3を追加する必要がありました。私のpython3があった場所私が把握しなければならなかったのpython3経由
danivicario

10

大規模な組織でSparkを実行していて、/ spark-env.shファイルを更新できない場合、環境変数のエクスポートが機能しない可能性があります。

--conf実行時にジョブを送信するときに、オプションを使用して特定のSpark設定を追加できます。

pyspark --master yarn --[other settings]\ 
  --conf "spark.pyspark.python=/your/python/loc/bin/python"\ 
  --conf "spark.pyspark.driver.python=/your/python/loc/bin/python"

9

私はちょうど同じ問題に直面しました、そしてこれらは私がPythonバージョンを提供するために従うステップです。PySparkジョブを2.6ではなくPython2.7で実行したかったのです。

  1. $SPARK_HOMEが指しているフォルダに移動します(私の場合は/home/cloudera/spark-2.1.0-bin-hadoop2.7/

  2. フォルダの下にconf、というファイルがありますspark-env.shと呼ばれるファイルがある場合は、そのファイルをと呼ばれるspark-env.sh.template新しいファイルにコピーする必要がありますspark-env.sh

  3. ファイルを編集して、次の3行を書き込みます

    エクスポートPYSPARK_PYTHON = / usr / local / bin / python2.7

    エクスポートPYSPARK_DRIVER_PYTHON = / usr / local / bin / python2.7

    エクスポートSPARK_YARN_USER_ENV = "PYSPARK_PYTHON = / usr / local / bin / python2.7"

  4. それを保存して、アプリケーションを再度起動します:)

このようにして、新しいSparkスタンドアロンバージョンをダウンロードする場合、PySparkを実行するPythonバージョンを設定できます。


2
テンプレートの名前とコンテンツを変更するのではなくcp、ファイルspark-env.sh.templateを新規として作成してから、spark-env.sh新しいファイルを変更することをお勧めします。テンプレートは参照として残ることになっています。
et_l

@et_lそうです、コメントを考慮して回答に少し変更を加えました。ありがとうございます。
セルクナム

5

同じエラーメッセージが表示され、上記の3つの方法を試しました。私は他の人への補足的な参照として結果をリストしました。

  1. 変更PYTHON_SPARKPYTHON_DRIVER_SPARK価値のspark-env.sh私のために動作しません。
  2. を使用os.environ["PYSPARK_PYTHON"]="/usr/bin/python3.5" os.environ["PYSPARK_DRIVER_PYTHON"]="/usr/bin/python3.5"してPythonスクリプト内の値を変更しても機能しません。
  3. ~/.bashrcチャームみたいな作品で値を変えて〜

あなたのコメントはHour.Thanksを過ごした後、純粋な金である
cheapcoder

どうもありがとうございました。私は多くのソリューションをテストしました。あなたはとてもうまくいきました。
ミューザー

3

私はそれをIPythonで実行していて(Jacek Wasilewskiによるこのリンクで説明されているように)、この例外が発生していました。PYSPARK_PYTHONIPythonカーネルファイルに追加され、jupyter Notebookを使用して実行され、動作を開始しました。

vi  ~/.ipython/kernels/pyspark/kernel.json

{
 "display_name": "pySpark (Spark 1.4.0)",
 "language": "python",
 "argv": [
  "/usr/bin/python2",
  "-m",
  "IPython.kernel",
  "--profile=pyspark",
  "-f",
  "{connection_file}"
 ],

 "env": {
  "SPARK_HOME": "/usr/local/spark-1.6.1-bin-hadoop2.6/",
  "PYTHONPATH": "/usr/local/spark-1.6.1-bin-hadoop2.6/python/:/usr/local/spark-1
.6.1-bin-hadoop2.6/python/lib/py4j-0.8.2.1-src.zip",
  "PYTHONSTARTUP": "/usr/local/spark-1.6.1-bin-hadoop2.6/python/pyspark/shell.py
",
  "PYSPARK_SUBMIT_ARGS": "--master spark://127.0.0.1:7077 pyspark-shell",
  "PYSPARK_DRIVER_PYTHON":"ipython2",
   "PYSPARK_PYTHON": "python2"
 }

2

私は上の同じ問題だスタンドアロンスパークのウィンドウを。私の修正バージョンは次のとおりです。環境変数を次のように設定しました。

PYSPARK_SUBMIT_ARGS="pyspark-shell"
PYSPARK_DRIVER_PYTHON=jupyter
PYSPARK_DRIVER_PYTHON_OPTS='notebook' pyspark

この設定で、pysparkでアクションを実行し、次の例外が発生しました。

Python in worker has different version 3.6 than that in driver 3.5, PySpark cannot run with different minor versions.
Please check environment variables PYSPARK_PYTHON and PYSPARK_DRIVER_PYTHON are correctly set.

私のspark-workerが使用しているPythonバージョンを確認するには、cmdプロンプトで次を押します。

python --version
Python 3.6.3

Python3.6.3を見せてくれました。したがって、明らかに私のスパークワーカーはv3.6.3であるシステムPythonを使用しています。

設定してjupyterを実行するようにspark-driverを設定したPYSPARK_DRIVER_PYTHON=jupyterので、jupyterが使用しているPythonバージョンを確認する必要があります。

これを行うには、Anacondaプロンプトを開いて、

python --version
Python 3.5.X :: Anaconda, Inc.

ここで、jupyterpythonがv3.5.xを使用していることがわかりました。このバージョンは、どのノートブックでも確認できます([ヘルプ]-> [バージョン情報])。

次に、jupyterpythonをバージョンv3.6.6に更新する必要があります。これを行うには、Anacondaプロンプトを開いてヒットします

conda search python

これにより、Anacondaで利用可能なPythonバージョンのリストが表示されます。で希望のものをインストールします

conda install python = 3.6.3

これで、同じバージョン3.6.3のPythonインストールが両方とも実行されました。Sparkは準拠しないはずであり、Sparkドライバーでアクションを実行したときに準拠しませんでした。例外はなくなりました。ハッピーコーディング..。


1

現在のタスクのPythonバージョンのみを変更したい場合は、次のpysparkstartコマンドを使用できます。

    PYSPARK_DRIVER_PYTHON=/home/user1/anaconda2/bin/python PYSPARK_PYTHON=/usr/local/anaconda2/bin/python pyspark --master ..

1

以下のスニペットをご覧ください。

#setting environment variable for pyspark in linux||ubuntu
#goto --- /usr/local/spark/conf
#create a new file named spark-env.sh copy all content of spark-env.sh.template to it
#then add below lines to it, with path to python

PYSPARK_PYTHON="/usr/bin/python3"
PYSPARK_DRIVER_PYTHON="/usr/bin/python3"
PYSPARK_DRIVER_PYTHON_OPTS="notebook --no-browser"
#i was running python 3.6 ||run - 'which python' in terminal to find the path of python

投稿する前にテンプレートを確認してください。
DeepeshRehi20年

0

私は次の環境を使用しています

? python --version; ipython --version; jupyter --version
Python 3.5.2+
5.3.0
5.0.0

そして、次のエイリアスは私にとってうまく機能します

alias pyspark="PYSPARK_PYTHON=/usr/local/bin/python3 PYSPARK_DRIVER_PYTHON=ipython ~/spark-2.1.1-bin-hadoop2.7/bin/pyspark --packages graphframes:graphframes:0.5.0-spark2.1-s_2.11"    
alias pysparknotebook="PYSPARK_PYTHON=/usr/bin/python3 PYSPARK_DRIVER_PYTHON=jupyter PYSPARK_DRIVER_PYTHON_OPTS='notebook' ~/spark-2.1.1-bin-hadoop2.7/bin/pyspark --packages graphframes:graphframes:0.5.0-spark2.1-s_2.11"

ノートブックでは、次のように環境を設定しました

from pyspark.context import SparkContext
sc = SparkContext.getOrCreate()

0

エラー

「例外:ワーカーのPythonのバージョン2.6はドライバー2.7のPythonとは異なり、PySparkは異なるマイナーバージョンで実行できません」。 

修正(Cloudera環境の場合)

  • このファイルを編集します。 /opt/cloudera/parcels/cdh5.5.4.p0.9/lib/spark/conf/spark-env.sh

  • 次の行を追加します。

    export PYSPARK_PYTHON=/usr/bin/python
    export PYSPARK_DRIVER_PYTHON=python
    

0

今日仕事でこれに出くわした。管理者は、Python2.7をPYSPARK_PYTHONおよびとしてハードコーディングするのが賢明だと考えPYSPARK_DRIVER_PYTHONました$SPARK_HOME/conf/spark-env.sh。言うまでもなく、これは他のPythonバージョンまたは環境を利用するすべてのジョブを壊しました(これは私たちのジョブの90%以上です)。@PhillipStichは、私たちの場合のように、このファイルに対する書き込み権限が常にあるとは限らないことを正しく指摘しています。spark-submit呼び出しで構成を設定することはオプションですが、別の方法(yarn /クラスターモードで実行している場合)はSPARK_CONF_DIR、別の構成スクリプトを指すように環境変数を設定することです。そこで、PYSPARK_PYTHONやその他の必要なオプションを設定できます。テンプレートは、githubのspark-env.shソースコードにあります。


0

私の場合(Ubuntu 18.04)、ターミナルで次のコードを実行しました。

sudo vim ~/.bashrc

次にSPARK_HOME、次のように編集します。

export SPARK_HOME=/home/muser/programs/anaconda2019/lib/python3.7/site-packages/pyspark
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin

そうSPARK_HOMEすることで、pysparkにインストールしたパッケージを参照しますsite-package

使用方法についてはvimこのリンクにアクセスしください。


0

実行:

ls -l /usr/local/bin/python*

この例の最初の行は、python3シンボリックリンクを示しています。これをデフォルトのPythonシンボリックリンクとして設定するには、次のコマンドを実行します。

ln -s -f /usr/local/bin/python3 /usr/local/bin/python

次に、シェルをリロードします。


0

同じ問題が発生しましたが、仮想環境をアクティブ化するのを忘れていました。メンタルブランクも持っていた人のために。


0

Macで作業している場合は、次のコマンドを使用します

export SPARK_HOME=`brew info apache-spark | grep /usr | tail -n 1 | cut -f 1 -d " "`/libexec
export PYTHONPATH=$SPARK_HOME/python:$PYTHONPATH

export HADOOP_HOME=`brew info hadoop | grep /usr | head -n 1 | cut -f 1 -d " "`/libexec
export LD_LIBRARY_PATH=$HADOOP_HOME/lib/native/:$LD_LIBRARY_PATH
export PYSPARK_PYTHON=python3

別のOSを使用している場合は、次のリンクを確認してください:https//github.com/GalvanizeDataScience/spark-install

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.