web-dev-qa-db-ja.com

pysparkインポートユーザー定義モジュールまたは.pyファイル

python module をビルドし、pysparkアプリケーションにインポートしたい。

私のパッケージのディレクトリ構造は次のとおりです。

wesam/
|-- data.py
`-- __init__.py

シンプルな import wesam pysparkスクリプトの上部にあるImportError: No module named wesam。また、zipで圧縮して、コードに--py-files as この回答で推奨 、運はありません。

./bin/spark-submit --py-files wesam.Zip mycode.py

また、 this answer で示唆されているようにプログラムでファイルを追加しましたが、同じImportError: No module named wesamエラー。

.sc.addPyFile("wesam.Zip")

ここで何が欠けていますか?

20
Wesam

クライアントモード でアプリケーションを送信するため、_spark-submit_コマンドを実行するマシンがドライバープログラムを実行し、モジュールファイルにアクセスする必要があることが判明しました。

enter image description here

_.bashrc_ファイルに次の行を追加して、ジョブを送信するノードのPYTHONPATH環境変数にモジュールを追加しました(または、ジョブを送信する前に実行します)。

_export PYTHONPATH=$PYTHONPATH:/home/welshamy/modules
_

そしてそれは問題を解決しました。パスはドライバーノード上にあるため、_--py-files_を使用してモジュールを圧縮して出荷したり、sc.addPyFile()を使用したりする必要はありません。

Pysparkモジュールのインポートエラーの問題を解決する鍵は、ドライバーまたはワーカー(または両方)のノードがモジュールファイルを必要とするかどうかを理解することです。

重要ワーカーノードがモジュールファイルを必要とする場合、_--py-files_とこの引数must.pyファイルの引数の前。たとえば、これらの例の引数の順序に注意してください。

これは正しいです:

_./bin/spark-submit --py-files wesam.Zip mycode.py
_

これはnot正しい:

_./bin/spark-submit mycode.py --py-files wesam.Zip
_
41
Wesam

mycode.pywesam.pyを同じパスの場所に入れて試してください

sc.addPyFile("wesam.py")

うまくいくかもしれません。

3
Dj.OU