web-dev-qa-db-ja.com

SparkContextを初期化するとき、pysparkエラーはjvmエラーに存在しません

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をインポートする必要があると答えていますが、これも機能していません。

8
thebeancounter

PySparkは最近2.4.0をリリースしましたが、spark=この新しいバージョンと一致する安定したリリースはありません。pyspark2.3.2にダウングレードしてみてください。

編集:より明確にするために、PySparkのバージョンは、ダウンロードされたApache Sparkバージョンと同じである必要があります。そうでない場合、互換性の問題が発生する可能性があります

を使用してpysparkのバージョンを確認します

ピップフリーズ

19
svw

Windowsデバイスにpysparkを新しくインストールしたところ、まったく同じ問題が発生していました。助けたと思われるものは次のとおりです:

システム環境変数に移動し、次の値でPYTHONPATHを追加します:%SPARK_HOME%\python;%SPARK_HOME%\python\lib\py4j-<version>-src.Zip:%PYTHONPATH%、spark/python/libフォルダーにあるpy4jバージョンを確認してください。

私がこれがうまくいくと思う理由は、condaを使用してpysparkをインストールしたときに、特定のバージョンのsparkと互換性がないpy4jバージョンもダウンロードしたため、独自のバージョンをパッケージ化しているようです。

2
mugurkt

これをファイルの先頭に追加してみてください:

import findspark
findspark.init()

https://github.com/minrk/findspark を参照してください

1
fstang

次の手順で問題を解決しました。-2.3.2へのダウングレード-値%SPARK_HOME%\python;%SPARK_HOME%\python\lib\py4j-<version>-src.Zip:%PYTHONPATH%注:を使用したシステム環境変数としてのPYTHONPATHの追加上記の値、正確にコピーしないでください。

1
Babu Reddy

この状況を停止するには、プログラムの最後にSparkContext()。stop()を使用します。

1
abhishek kumar

環境変数を編集する代わりに、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バージョンです。

0
Pawel Kranzberg

簡単にするために、pythonとJavaは話すことができなかったのは、話す必要のある媒体(py4j)が異なるためです)私は同じ問題を抱えていて、上記の回答はすべて有効であり、それらを正しく使用すると機能します。どちらのpy4jを使用するかを伝えるシステム変数を定義するか、アンインストールとインストールを元に戻すことができます全員が同じページにいます。

0
viv_tony