spark 1.4.0-rc2を使用しているため、sparkでpython 3を使用できます。 export PYSPARK_PYTHON=python3
を.bashrcファイルに追加すると、sparkをpython 3でインタラクティブに実行できます。ただし、ローカルモードでスタンドアロンプログラムを実行したい場合、エラーが発生します。
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
の設定は機能しませんでした。
PYSPARK_PYTHON=python3
とPYSPARK_DRIVER_PYTHON=python3
の両方をpython3に設定するとうまくいきます。 .bashrcでエクスポートを使用してこれを行いました。最後に、これらは私が作成する変数です。
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/
私の場合に役立ちました:
import os
os.environ["SPARK_HOME"] = "/usr/local/Cellar/Apache-spark/1.5.1/"
os.environ["PYSPARK_PYTHON"]="/usr/local/bin/python3"
./conf/spark-env.sh
ファイルに適切な環境変数を設定することにより、ドライバーのPythonのバージョンを指定できます。まだ存在しない場合は、提供されているspark-env.sh.template
ファイルを使用できます。このファイルには、他の多くの変数も含まれています。
関連するPython環境変数を設定するspark-env.sh
ファイルの簡単な例を次に示します。
#!/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
で検証してください) )。私は同様の問題を抱えていたので、修正しました。
私はちょうど同じ問題に直面しており、これらはPythonバージョンを提供するために従うべきステップです。 2.6ではなくPython 2.7でPySparkジョブを実行したかった。
$SPARK_HOME
が指しているフォルダーに移動します(私の場合は/home/cloudera/spark-2.1.0-bin-hadoop2.7/
です)
conf
フォルダーの下に、spark-env.sh
というファイルがあります。 spark-env.sh.template
というファイルがある場合は、spark-env.sh
という新しいファイルにファイルをコピーする必要があります。
ファイルを編集して、次の3行を記述します
export PYSPARK_PYTHON =/usr/local/bin/python2.7
エクスポートPYSPARK_DRIVER_PYTHON =/usr/local/bin/python2.7
export SPARK_YARN_USER_ENV = "PYSPARK_PYTHON =/usr/local/bin/python2.7"
保存して、アプリケーションをもう一度起動してください:)
そのようにして、新しいSparkスタンドアロンバージョンをダウンロードする場合、PySparkを実行するPythonバージョンを設定できます。
大規模な組織で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"
私はそれをIPythonで実行し(この Jacek Wasilewskiによるリンク で説明されているように)、この例外を取得していました。 PYSPARK_PYTHON
をIPythonカーネルファイルに追加し、jupyterノートブックを使用して実行し、動作を開始しました。
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"
}
同じエラーメッセージが表示され、上記の3つの方法を試しました。結果を他の補完的な参照としてリストしました。
PYTHON_SPARK
のPYTHON_DRIVER_SPARK
とspark-env.sh
の値を変更しても機能しません。os.environ["PYSPARK_PYTHON"]="/usr/bin/python3.5"
を使用してpythonスクリプト内の値を変更すると、os.environ["PYSPARK_DRIVER_PYTHON"]="/usr/bin/python3.5"
は機能しません。~/.bashrc
の値を変更すると、チャームのように機能します〜windowsのstandalone sparkで同じ問題が発生しました。私の修正バージョンは次のとおりです。環境変数を次のように設定しました
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.
どのpythonバージョンmyspark-workerが使用されているかを確認するには、で以下をヒットします。 cmdプロンプト。
python --version
Python 3.6.3
それは私を示したPython 3.6.3。だから明らかに私のspark-workerはv3.6.3であるシステムpythonを使用しています。
ここで、spark-driverを設定してPYSPARK_DRIVER_PYTHON=jupyter
を設定してjupyterを実行するため、jupyterが使用しているpythonバージョンを確認する必要があります。
このチェックを行うには、開いたAnacondaプロンプトを押して
python --version
Python 3.5.X :: Anaconda, Inc.
ここでは、jupyter pythonがv3.5.xを使用しています。ノートブックでもこのバージョンを確認できます([ヘルプ]-> [バージョン情報])。
ここで、jupyter pythonをバージョンv3.6.6に更新する必要があります。それを行うには、Anaconda Promptを開き、ヒットします
conda検索python
これにより、Anacondaで利用可能なpythonバージョンのリストが表示されます。希望するものをインストールします
conda install python = 3.6.3
これで、同じバージョン3.6.3のPythonインストールが両方ともSparkに準拠しなくなり、Spark-driverでアクションを実行したときに準拠しなくなりました。例外はなくなりました。ハッピーコーディング...
今日は仕事でこれを使いました。管理者は、PYSPARK_PYTHON
のPYSPARK_DRIVER_PYTHON
および$SPARK_HOME/conf/spark-env.sh
としてハードコードPython 2.7を使用するのが賢明だと考えました。言うまでもなく、これにより、他のpythonバージョンまたは環境を使用するすべてのジョブが中断されました(ジョブの90%を超える)。 @PhillipStichは、このファイルの書き込み権限が常にあるとは限らないことを正しく指摘しています。 spark-submit
呼び出しで構成を設定することはオプションですが、別の代替手段(糸/クラスターモードで実行する場合)は、別の構成スクリプトを指すようにSPARK_CONF_DIR
環境変数を設定することです。そこで、PYSPARK_PYTHONおよび必要なその他のオプションを設定できます。テンプレートは githubのspark-env.shソースコード にあります。
次の環境を使用しています
? 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()
現在のタスクのpythonバージョンのみを変更する場合は、次のpyspark startコマンドを使用できます。
PYSPARK_DRIVER_PYTHON=/home/user1/anaconda2/bin/python PYSPARK_PYTHON=/usr/local/anaconda2/bin/python pyspark --master ..
「例外:ワーカーのPythonのバージョンはdriver 2.7のバージョンとは異なり、PySparkは異なるマイナーバージョンでは実行できません」
このファイルを編集します:/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