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


111

これは回答されなかった別のフォーラムでの誰かの質問のコピーです。同じ問題があるので、ここでもう一度質問すると思います。(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ヘッダー/ライブラリ/その他を指すように設定する必要がある環境変数はありますか?Sparkのインストールが/ spark /の場合、どのpysparkパスを含める必要がありますか?または、pysparkプログラムはpysparkインタープリターからのみ実行できますか?


彼らは、環境変数の変更は「bin / spark-submitによって非常に迅速にオーバーライドされるため、あまり効果的ではない」と述べています。たぶん、あなたはこの交換から何かを学ぶことができます
emmagras

回答:


97

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

findsparkを使用する

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

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

    from pyspark import SparkContext
    from pyspark import SparkConf
  3. できた!!!


他の解決策は私にとってはうまくいきませんでした。私のプログラムでは今のところfindsparkを使用しています。問題に対する適切な回避策のようです。
分析モンク

私はむしろこれを行う必要はありません..しかし、ちょっと .. 他に何も機能しないことを考えると..私はそれを取ります。
javadba 2016年

51

そのようなエラーを出力する場合:

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

9
別の応答で説明されているように、 stackoverflow.com / questions / 26533169 /…次のエクスポートを追加する必要がありましたPYTHONPATH = $ SPARK_HOME / python / lib / py4j-0.8.2.1-src.zip:$ PYTHONPATH
meyerson

46

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

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

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


1
このステップに加えて、私も追加する必要がありましたexport SPARK_HOME=~/dev/spark-1.1.0。フォルダ名は異なる場合があります。
emmagras 2014年

21

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


誰かがこれをしない理由を拡大できますか?私はこの質問を調査してきましたが、これまでのところ、その理由を説明するものを見つけることができませんでした。
ミント

@Mint他の回答はその理由を示しています。pysparkパッケージは、デフォルトでは$ PYTHONPATHに含まれていないため、import pysparkコマンドラインまたは実行されたスクリプトで失敗します。次のいずれかを行う必要があります。意図したとおりにspark-submitを使用してpysparkを実行するか、b。$ SPARK_HOME / pythonを$ PYTHONPATHに追加します。
kingledion

もう1つのポイントは、spark-submitがシェルスクリプトであることです。これは、sparkを使用する前にシステム環境を正しく構成するのに役立ちます。pythonmain.pyだけを実行する場合は、システム環境を正しく構成する必要があります(例:PYTHONPATH、SPARK_HOME
E.ZY)。

21

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ファイルに追加することができます。


1
インストールでlibexecディレクトリが見つかりませんApache Spark
Alberto Bonsanto

@AlbertoBonsanto申し訳ありません。私はこの問題に直面していません。だから、
わから

1
ええ、彼らはスパーク1.5.2でlibexecフォルダーを取り出しました
bluerubez

1
@bluerubezスパーク1.6.2にあるようです...また、libexec/python/buildディレクトリの目的は
わかり

17

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

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バージョンに置き換えます。


14

pysparkでSparkを実行するには、2つのコンポーネントを連携させる必要があります。

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

spark-submitまたはpysparkを使用して起動する場合、これらのスクリプトは両方に対応します。つまり、スクリプトがpysparkを検出できるようにPYTHONPATH、PATHなどを設定し、また、sparkインスタンスを開始して、パラメーターに従って構成します。 、たとえば--master X

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

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

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

from pyspark.sql import SparkSession

if __name__ == "__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())

9

を取り除くには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

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

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

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


5

Linuxユーザーの場合、以下はPYTHONPATHにpyspark libarayを含める正しい(ハードコードされていない)方法です。両方のPATH部分が必要です:

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

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

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

4

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

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

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

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

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


4

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

pip show pyspark

3

私も同じ問題を抱えていました。

また、適切なpythonバージョンを使用していること、および適切なpipバージョンでインストールしていることを確認してください。私の場合:私はpython 2.7と3.xの両方を持っていました。私はpysparkをインストールしました

pip2.7インストールpyspark

そしてそれは働いた。


2

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


2

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

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

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

dse pyspark

2

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

PYTHONPATH=$SPARK_HOME/libexec/python/lib/py4j-0.9-src.zip:$PYTHONPATH

注-解凍してpy4jフォルダのみを使用しましたが、機能しませんでした。zipファイルを使用してください
El Dude

2

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

python -m pip install pyspark

1

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

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