SparkでPythonを使用する際に問題があります。私のアプリケーションには、numpy、pandas、astropyなどのいくつかの依存関係があります。クラスタ上のノードにはHDFS以外の共通のマウントポイントやファイルシステムがないため、virtualenvを使用してすべての依存関係の環境を作成することはできません。したがって、私はspark-submit --py-files
を使用して立ち往生しています。 site-packagesの内容をZIPファイルにパッケージ化し、--py-files=dependencies.zip
オプション(Easiest way to install Python dependencies on Spark executor nodes?で示唆)のようなジョブを送信します。しかし、クラスタ上のノードはまだモジュールが内部にあるようには見えず、numpyをインポートするときにはImportError
を投げます。Sparkの--py-filesが動作しないようです。
File "/path/anonymized/module.py", line 6, in <module>
import numpy
File "/tmp/pip-build-4fjFLQ/numpy/numpy/__init__.py", line 180, in <module>
File "/tmp/pip-build-4fjFLQ/numpy/numpy/add_newdocs.py", line 13, in <module>
File "/tmp/pip-build-4fjFLQ/numpy/numpy/lib/__init__.py", line 8, in <module>
#
File "/tmp/pip-build-4fjFLQ/numpy/numpy/lib/type_check.py", line 11, in <module>
File "/tmp/pip-build-4fjFLQ/numpy/numpy/core/__init__.py", line 14, in <module>
ImportError: cannot import name multiarray
私はvirtualenvのに切り替えて、ローカルpysparkシェルを使用すると、すべてが正常に動作しますので、依存関係がすべてそこにあります。誰もが知っている、何がこの問題を引き起こす可能性があり、それを修正する方法?
ありがとうございます!
明らかに、問題は、Pythonが.zipファイル(。https://docs.python.org/2/library/zipimport.html)から.soモジュールをインポートできないということです。つまり、私は何とかすべてのワーカーにzipファイルを解凍して、すべてのワーカーのsys.pathにアンパック場所を追加する必要があります。私はそれを試して、それがどのように行くか見る。 –
私も同様の問題があります。どのように問題を解決しましたか? – ramhiser
私は、クラスタの管理者が作業者マシンに依存関係をインストールするように納得させました。もう1つの解決策は、依存関係が存在するすべてのマシンにマウントされたボリュームを作成することです。私は何か他のことができるかどうかわからない: - \ –