これは別のフォーラムでの誰かの質問のコピーであり、回答はありませんでしたので、同じ問題があるので、ここでもう一度質問したいと思いました。 ( 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インタープリターからのみ実行できますか?
Pyspark binがpythonをロードしており、正しいライブラリパスを自動的にロードしていることがわかります。 $ SPARK_HOME/bin/pysparkを確認してください:
# Add the PySpark classes to the Python path:
export PYTHONPATH=$SPARK_HOME/python/:$PYTHONPATH
この行を.bashrcファイルに追加すると、モジュールが正しく検出されました!
ここに簡単な方法があります(それがどのように機能するか気にしない場合!!!)
findspark を使用します
Pythonシェルに移動します
pip install findspark
import findspark
findspark.init()
必要なモジュールをインポートする
from pyspark import SparkContext
from pyspark import SparkConf
完了!!!
このようなエラーが出力される場合:
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
pyファイルを次のように実行しないでください:python filename.py
代わりに:spark-submit filename.py
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
ファイルに追加することをお勧めします。
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バージョンに置き換えます。
PysparkでSparkを実行するには、連携するために2つのコンポーネントが必要です。
pyspark
pythonパッケージSpark-submitまたはpysparkを使用して起動する場合、これらのスクリプトは両方を処理します。つまり、PyTHONPATH、PATHなどを設定して、スクリプトがpysparkを見つけられるようにします。 、例えば-マスターX
または、これらのスクリプトをバイパスして、Pythonインタープリターlikepython myscript.py
で直接Sparkアプリケーションを実行することもできます。これは、sparkスクリプトがより複雑になり始め、最終的に独自の引数を受け取るときに特に興味深いものです。
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())
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)
Windows 10では、以下がうまくいきました。 設定> アカウントの環境変数の編集を使用して、次の環境変数を追加しました。
SPARK_HOME=C:\Programming\spark-2.0.1-bin-hadoop2.7
PYTHONPATH=%SPARK_HOME%\python;%PYTHONPATH%
(「C:\ Programming\...」を、sparkをインストールしたフォルダーに変更します)
Linuxユーザーの場合、PyTHONPATHにpyspark libarayを含める正しい(およびハードコーディングされていない)方法は次のとおりです。両方のPATH部分が必要です。
以下に、zip圧縮されたライブラリのバージョンが動的に決定されるため、ハードコーディングしないことに注意してください。
export PYTHONPATH=${SPARK_HOME}/python/:$(echo ${SPARK_HOME}/python/lib/py4j-*-src.Zip):${PYTHONPATH}
同じ問題がありました。
また、正しいpythonバージョンを使用しており、正しいpipバージョンでインストールしていることを確認してください。私の場合、Python 2.7と3.xの両方がありました。私はpysparkをインストールしました
pip2.7 pysparkのインストール
そしてそれは働いた。
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でスタンドアロンパッケージとして利用できますが、まだテストしていません。
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
DSE(DataStax Cassandra&Spark)の場合、次の場所をPYTHONPATHに追加する必要があります
export PYTHONPATH=/usr/share/dse/resources/spark/python:$PYTHONPATH
次に、dse pysparkを使用して、モジュールをパスに取得します。
dse pyspark
以下のようにpip
を使用してpythonでpyspark path
を取得できます(PIPを使用してpysparkをインストールした場合)。
pip show pyspark
OSとしてAlpineを使用してDockerコンテナーを作成し、パッケージとしてPythonおよびPysparkをインストールすることもできます。これにより、すべてコンテナ化されます。
送信しようとしたPythonスクリプトがpyspark.py(facepalm)と呼ばれていたため、このエラーが発生しました。修正は、上記の推奨に従ってPYTHONPATHを設定し、スクリプトの名前をpyspark_test.pyに変更し、スクリプトの元の名前に基づいて作成され、このエラーを解消したpyspark.pycをクリーンアップすることでした。
私もこれと同じ問題を抱えており、上記の提案されたソリューションに1つのことを追加します。 Mac OS XでHomebrewを使用してSparkをインストールする場合、pyexecのパスアドレスを修正して、libexecをパスに含める必要があります(py4jのバージョンを現在のものに変更することを忘れないでください)。
PYTHONPATH=$SPARK_HOME/libexec/python/lib/py4j-0.9-src.Zip:$PYTHONPATH
私の場合、Python 3.6を使用していたのに対し、別のpython dist_package(python 3.5)でインストールされていたので、以下が役立ちました:
python -m pip install pyspark