web-dev-qa-db-ja.com

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

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の設定は機能しませんでした。

66
Kevin

PYSPARK_PYTHON=python3PYSPARK_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/

60
fccoelho

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

import os

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

./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で検証してください) )。私は同様の問題を抱えていたので、修正しました。

10
James Clarke

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

  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行を記述します

    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"

  4. 保存して、アプリケーションをもう一度起動してください:)

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

6
dbustosp

大規模な組織で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"
4
Phillip Stich

私はそれを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"
 }
2
Alex Punnen

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

  1. PYTHON_SPARKPYTHON_DRIVER_SPARKspark-env.shの値を変更しても機能しません。
  2. os.environ["PYSPARK_PYTHON"]="/usr/bin/python3.5"を使用してpythonスクリプト内の値を変更すると、os.environ["PYSPARK_DRIVER_PYTHON"]="/usr/bin/python3.5"は機能しません。
  3. ~/.bashrcの値を変更すると、チャームのように機能します〜
1
Frank

windowsstandalone 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でアクションを実行したときに準拠しなくなりました。例外はなくなりました。ハッピーコーディング...

0
Rizvi Hasan

今日は仕事でこれを使いました。管理者は、PYSPARK_PYTHONPYSPARK_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ソースコード にあります。

0
Grr

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

? 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
George Fisher

現在のタスクのpythonバージョンのみを変更する場合は、次のpyspark startコマンドを使用できます。

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

エラー

「例外:ワーカーのPythonのバージョンはdriver 2.7のバージョンとは異なり、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
William Lee