web-dev-qa-db-ja.com

Pythonシェルでのpysparkのインポート

これは別のフォーラムでの誰かの質問のコピーであり、回答はありませんでしたので、同じ問題があるので、ここでもう一度質問したいと思いました。 ( http://geekple.com/blogs/feeds/Xgzu7/posts/351703064084736を参照)

Sparkをマシンに適切にインストールし、Pythonインタープリターとして./bin/pysparkを使用すると、pysparkモジュールを使用してpythonプログラムをエラーなしで実行できます。

ただし、通常のPythonシェルを実行しようとすると、pysparkモジュールをインポートしようとすると、次のエラーが表示されます。

from pyspark import SparkContext

そしてそれは言います

"No module named pyspark".

どうすれば修正できますか? Pythonがpyspark headers/libraries/etcを指すように設定する必要がある環境変数はありますか? Sparkのインストールが/ spark /の場合、どのpysparkパスを含める必要がありますか?または、pysparkプログラムはpysparkインタープリターからのみ実行できますか?

100
Glenn Strycker

Pyspark binがpythonをロードしており、正しいライブラリパスを自動的にロードしていることがわかります。 $ SPARK_HOME/bin/pysparkを確認してください:

# Add the PySpark classes to the Python path:
export PYTHONPATH=$SPARK_HOME/python/:$PYTHONPATH

この行を.bashrcファイルに追加すると、モジュールが正しく検出されました!

40
Glenn Strycker

ここに簡単な方法があります(それがどのように機能するか気にしない場合!!!)

findspark を使用します

  1. Pythonシェルに移動します

    pip install findspark
    
    import findspark
    findspark.init()
    
  2. 必要なモジュールをインポートする

    from pyspark import SparkContext
    from pyspark import SparkConf
    
  3. 完了!!!

79
Suresh2692

このようなエラーが出力される場合:

ImportError:py4j.Java_gatewayというモジュールはありません

$ SPARK_HOME/python/buildをPYTHONPATHに追加してください:

export SPARK_HOME=/Users/pzhang/apps/spark-1.1.0-bin-hadoop2.4
export PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/build:$PYTHONPATH
46

pyファイルを次のように実行しないでください:python filename.py代わりに:spark-submit filename.py

19
dodo

SPARKパスとPy4jパスをエクスポートすることで、機能し始めました:

export SPARK_HOME=/usr/local/Cellar/Apache-spark/1.5.1
export PYTHONPATH=$SPARK_HOME/libexec/python:$SPARK_HOME/libexec/python/build:$PYTHONPATH
PYTHONPATH=$SPARK_HOME/python/lib/py4j-0.8.2.1-src.Zip:$PYTHONPATH 
export PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/build:$PYTHONPATH

したがって、Pythonシェルを起動するたびにこれらを入力したくない場合は、.bashrcファイルに追加することをお勧めします。

18
Dawny33

Macでは、Homebrewを使用してSparkをインストールします(式 "Apache-spark")。次に、PYTHONPATHをこのように設定して、Pythonインポートが機能するようにします。

export SPARK_HOME=/usr/local/Cellar/Apache-spark/1.2.0
export PYTHONPATH=$SPARK_HOME/libexec/python:$SPARK_HOME/libexec/python/build:$PYTHONPATH

「1.2.0」をMacの実際のApache-sparkバージョンに置き換えます。

15
jyu

PysparkでSparkを実行するには、連携するために2つのコンポーネントが必要です。

  • pyspark pythonパッケージ
  • JVMのSparkインスタンス

Spark-submitまたはpysparkを使用して起動する場合、これらのスクリプトは両方を処理します。つまり、PyTHONPATH、PATHなどを設定して、スクリプトがpysparkを見つけられるようにします。 、例えば-マスターX

または、これらのスクリプトをバイパスして、Pythonインタープリターlikepython myscript.pyで直接Sparkアプリケーションを実行することもできます。これは、sparkスクリプトがより複雑になり始め、最終的に独自の引数を受け取るときに特に興味深いものです。

  1. Pythonインタープリターがpysparkパッケージを見つけることができるようにします。すでに説明したように、spark/pythonディレクトリをPYTHONPATHに追加するか、pip installを使用してpysparkを直接インストールします。
  2. スクリプト(以前はpysparkに渡されていたもの)からsparkインスタンスのパラメーターを設定します。
    • 通常は--confで設定するSpark設定の場合、SparkSession.builder.configの設定オブジェクト(または文字列設定)で定義されます
    • 主なオプション(--master、-driver-memなど)については、PYSPARK_SUBMIT_ARGS環境変数に書き込むことで設定できます。物事をよりクリーンで安全にするために、Python自体から設定することができ、sparkは起動時にそれを読み取ります。
  3. インスタンスを起動します。これには、ビルダーオブジェクトからgetOrCreate()を呼び出すだけです。

したがって、スクリプトには次のようなものがあります。

from pyspark.sql import SparkSession

if __== "__main__":
    if spark_main_opts:
        # Set main options, e.g. "--master local[4]"
        os.environ['PYSPARK_SUBMIT_ARGS'] = spark_main_opts + " pyspark-Shell"

    # Set spark config
    spark = (SparkSession.builder
             .config("spark.checkpoint.compress", True)
             .config("spark.jars.packages", "graphframes:graphframes:0.5.0-spark2.1-s_2.11")
             .getOrCreate())
12
F Pereira

ImportError: No module named py4j.Java_gatewayを削除するには、次の行を追加する必要があります。

import os
import sys


os.environ['SPARK_HOME'] = "D:\python\spark-1.4.1-bin-hadoop2.4"


sys.path.append("D:\python\spark-1.4.1-bin-hadoop2.4\python")
sys.path.append("D:\python\spark-1.4.1-bin-hadoop2.4\python\lib\py4j-0.8.2.1-src.Zip")

try:
    from pyspark import SparkContext
    from pyspark import SparkConf

    print ("success")

except ImportError as e:
    print ("error importing spark modules", e)
    sys.exit(1)
7
Karang

Windows 10では、以下がうまくいきました。 設定> アカウントの環境変数の編集を使用して、次の環境変数を追加しました。

SPARK_HOME=C:\Programming\spark-2.0.1-bin-hadoop2.7
PYTHONPATH=%SPARK_HOME%\python;%PYTHONPATH%

(「C:\ Programming\...」を、sparkをインストールしたフォルダーに変更します)

5
JustAC0der

Linuxユーザーの場合、PyTHONPATHにpyspark libarayを含める正しい(およびハードコーディングされていない)方法は次のとおりです。両方のPATH部分が必要です。

  1. Pyspark Pythonモジュール自体へのパス、および
  2. Pysparkモジュールがインポート時に依存する圧縮ライブラリへのパス

以下に、zip圧縮されたライブラリのバージョンが動的に決定されるため、ハードコーディングしないことに注意してください。

export PYTHONPATH=${SPARK_HOME}/python/:$(echo ${SPARK_HOME}/python/lib/py4j-*-src.Zip):${PYTHONPATH}
3
NYCeyes

同じ問題がありました。

また、正しいpythonバージョンを使用しており、正しいpipバージョンでインストールしていることを確認してください。私の場合、Python 2.7と3.xの両方がありました。私はpysparkをインストールしました

pip2.7 pysparkのインストール

そしてそれは働いた。

2
etinika
export PYSPARK_PYTHON=/home/user/anaconda3/bin/python
export PYSPARK_DRIVER_PYTHON=jupyter
export PYSPARK_DRIVER_PYTHON_OPTS='notebook'

これは、AnacondaディストリビューションをSparkで使用するために行ったことです。これはSparkバージョンに依存しません。最初の行をユーザーのpython binに変更できます。また、Spark 2.2.0の時点で、PySparkはPyPiでスタンドアロンパッケージとして利用できますが、まだテストしていません。

2
Yayati Sule

Cloudera yumパッケージからインストールされたCentOS VMでSparkクラスターを実行しています。

Pysparkを実行するには、次の変数を設定する必要がありました。

export SPARK_HOME=/usr/lib/spark;
export PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/lib/py4j-0.9-src.Zip:$PYTHONPATH
2

DSE(DataStax Cassandra&Spark)の場合、次の場所をPYTHONPATHに追加する必要があります

export PYTHONPATH=/usr/share/dse/resources/spark/python:$PYTHONPATH

次に、dse pysparkを使用して、モジュールをパスに取得します。

dse pyspark
1
Sreesankar

以下のようにpipを使用してpythonでpyspark pathを取得できます(PIPを使用してpysparkをインストールした場合)。

pip show pyspark
1
user3524049

OSとしてAlpineを使用してDockerコンテナーを作成し、パッケージとしてP​​ythonおよびPysparkをインストールすることもできます。これにより、すべてコンテナ化されます。

1
Eddy

送信しようとしたPythonスクリプトがpyspark.py(facepalm)と呼ばれていたため、このエラーが発生しました。修正は、上記の推奨に従ってPYTHONPATHを設定し、スクリプトの名前をpyspark_test.pyに変更し、スクリプトの元の名前に基づいて作成され、このエラーを解消したpyspark.pycをクリーンアップすることでした。

1
Patrick

私もこれと同じ問題を抱えており、上記の提案されたソリューションに1つのことを追加します。 Mac OS XでHomebrewを使用してSparkをインストールする場合、pyexecのパスアドレスを修正して、libexecをパスに含める必要があります(py4jのバージョンを現在のものに変更することを忘れないでください)。

PYTHONPATH=$SPARK_HOME/libexec/python/lib/py4j-0.9-src.Zip:$PYTHONPATH
1
tjb305

私の場合、Python 3.6を使用していたのに対し、別のpython dist_package(python 3.5)でインストールされていたので、以下が役立ちました:

python -m pip install pyspark
0
D Untouchable