我正在使用spark over 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,但这也无法正常工作。
答案 0 :(得分:15)
PySpark最近发布了2.4.0,但是没有一个稳定的版本可以与此新版本同时出现。尝试降级到pyspark 2.3.2,这对我来说已解决
编辑:为更加清楚,您的PySpark版本必须与下载的Apache Spark版本相同,否则您可能会遇到兼容性问题
使用
检查pyspark的版本点冻结
答案 1 :(得分:3)
您需要设置以下环境来设置Spark路径和Py4j路径。
例如〜/ .bashrc:
export SPARK_HOME=/home/hadoop/spark-2.1.0-bin-hadoop2.7
export PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/lib/py4j-0.10.4-src.zip:$PYTHONPATH
export PATH=$SPARK_HOME/bin:$SPARK_HOME/python:$PATH
并在文件顶部使用findspark:
import findspark
findspark.init()
答案 2 :(得分:2)
我刚刚在Windows设备上重新安装了pyspark,并遇到了完全相同的问题。似乎有所帮助的是以下内容:
转到系统环境变量,并使用以下值向其添加PYTHONPATH:%SPARK_HOME%\python;%SPARK_HOME%\python\lib\py4j-<version>-src.zip:%PYTHONPATH%
,只需检查spark / python / lib文件夹中的py4j版本。
之所以如此,是因为当我使用conda安装pyspark时,它还下载了py4j版本,该版本可能与spark的特定版本不兼容,因此它似乎打包了自己的版本。
答案 3 :(得分:1)
在程序末尾使用SparkContext()。stop()停止这种情况。
答案 4 :(得分:1)
以下步骤解决了我的问题:
-降级至2.3.2
-将PYTHONPATH添加为值为%SPARK_HOME%\python;%SPARK_HOME%\python\lib\py4j-<version>-src.zip:%PYTHONPATH%
的系统环境变量
注意:在上面给出的值中使用正确的版本,请勿完全复制。
答案 5 :(得分:0)
您可以仅确保Python环境(带有pyspark的环境)也具有与Spark文件夹中\ python \ lib \词典中提供的zip文件相同的py4j版本,而不是编辑环境变量。例如,我系统上的d:\ Programs \ Spark \ python \ lib \ py4j-0.10.7-src.zip,适用于Spark 2.3.2。这是作为Spark归档文件一部分提供的py4j版本。
答案 6 :(得分:0)
答案 7 :(得分:0)
只是为了简单起见,这完全是关于python和java不能说话的问题,因为必须说出来的媒体(py4j)不同,就是这样。我遇到了同样的问题,以上所有答案都是有效的,并且会起作用如果正确使用它们,或者是定义一个系统变量以告诉他们应该使用哪个py4j,或者可以进行一些卸载和安装,以便每个人都在同一页面上。
答案 8 :(得分:0)
当我从anaconda命令提示符下下载新版本的pip安装时,我遇到了同样的问题。
当我使用代码文件的顶部时:
导入findspark
findspark.init(“ c:\ spark”)
此代码解决了我的问题。
答案 9 :(得分:0)
尝试安装spark 2.4.5版本,并将spark主目录路径设置为此版本。甚至我在更改版本后也遇到了问题,它为我解决了。