spark emrを使用してpysparkスクリプトを記述しています。
from pyspark import SparkContext
sc = SparkContext()
これはエラーです
File "pyex.py", line 5, in <module>
sc = SparkContext() File "/usr/local/lib/python3.4/site-packages/pyspark/context.py", line 118, in __init__
conf, jsc, profiler_cls) File "/usr/local/lib/python3.4/site-packages/pyspark/context.py", line 195, in _do_init
self._encryption_enabled = self._jvm.PythonUtils.getEncryptionEnabled(self._jsc) File "/usr/local/lib/python3.4/site-packages/py4j/Java_gateway.py", line 1487, in __getattr__
"{0}.{1} does not exist in the JVM".format(self._fqn, name)) py4j.protocol.Py4JError: org.Apache.spark.api.python.PythonUtils.getEncryptionEnabled does not exist in the JVM
私は this sparkcontextをインポートする必要があると答えていますが、これも機能していません。
PySparkは最近2.4.0をリリースしましたが、spark=この新しいバージョンと一致する安定したリリースはありません。pyspark2.3.2にダウングレードしてみてください。
編集:より明確にするために、PySparkのバージョンは、ダウンロードされたApache Sparkバージョンと同じである必要があります。そうでない場合、互換性の問題が発生する可能性があります
を使用してpysparkのバージョンを確認します
ピップフリーズ
Windowsデバイスにpysparkを新しくインストールしたところ、まったく同じ問題が発生していました。助けたと思われるものは次のとおりです:
システム環境変数に移動し、次の値でPYTHONPATHを追加します:%SPARK_HOME%\python;%SPARK_HOME%\python\lib\py4j-<version>-src.Zip:%PYTHONPATH%
、spark/python/libフォルダーにあるpy4jバージョンを確認してください。
私がこれがうまくいくと思う理由は、condaを使用してpysparkをインストールしたときに、特定のバージョンのsparkと互換性がないpy4jバージョンもダウンロードしたため、独自のバージョンをパッケージ化しているようです。
これをファイルの先頭に追加してみてください:
import findspark
findspark.init()
https://github.com/minrk/findspark を参照してください
次の手順で問題を解決しました。-2.3.2へのダウングレード-値%SPARK_HOME%\python;%SPARK_HOME%\python\lib\py4j-<version>-src.Zip:%PYTHONPATH%
注:を使用したシステム環境変数としてのPYTHONPATHの追加上記の値、正確にコピーしないでください。
この状況を停止するには、プログラムの最後にSparkContext()。stop()を使用します。
環境変数を編集する代わりに、Python環境(pysparkのある環境)も、\ python\lib \辞書にあるZipファイルと同じpy4jバージョンを持っていることを確認するだけです。 you Spark folder。例えば、私のシステム上のd:\ Programs\Spark\python\lib\py4j-0.10.7-src.Zipは、Spark 2.3.2。Sparkアーカイブファイルの一部として出荷されるpy4jバージョンです。
簡単にするために、pythonとJavaは話すことができなかったのは、話す必要のある媒体(py4j)が異なるためです)私は同じ問題を抱えていて、上記の回答はすべて有効であり、それらを正しく使用すると機能します。どちらのpy4jを使用するかを伝えるシステム変数を定義するか、アンインストールとインストールを元に戻すことができます全員が同じページにいます。