Python 初始化SparkContext时jvm错误中不存在pyspark错误
我正在使用spark over emr并编写pyspark脚本, 我在尝试时遇到了一个错误Python 初始化SparkContext时jvm错误中不存在pyspark错误,python,python-3.x,apache-spark,pyspark,amazon-emr,Python,Python 3.x,Apache Spark,Pyspark,Amazon Emr,我正在使用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
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
文件“pyex.py”,第5行,在
sc=SparkContext()文件“/usr/local/lib/python3.4/site packages/pyspark/context.py”,第118行,在__
conf,jsc,profiler_cls)文件“/usr/local/lib/python3.4/site packages/pyspark/context.py”,第195行,在
self._encryption_enabled=self._jvm.PythonUtils.getencryptionnabled(self._jsc)文件“/usr/local/lib/python3.4/site packages/py4j/java_gateway.py”,第1487行,在__
JVM中不存在“{0}.{1}”。JVM中不存在格式(self._fqn,name))py4j.protocol.Py4JError:org.apache.spark.api.PythonUtils.getEncryptionEnabled
我发现答案是我需要导入sparkcontext,但这也不起作用。我刚刚在Windows设备上安装了一个新的pyspark,并且遇到了完全相同的问题。似乎有帮助的是: 转到您的系统环境变量,并使用以下值向其添加PYTHONPATH:
%SPARK\u HOME%\python;%SPARK\u HOME%\python\lib\py4j--src.zip:%PYTHONPATH%
,只需检查SPARK/python/lib文件夹中的py4j版本即可
我之所以认为这是可行的,是因为当我使用conda安装pyspark时,它还下载了一个py4j版本,该版本可能与spark的特定版本不兼容,因此它似乎打包了自己的版本 PySpark最近发布了2.4.0,但是没有稳定的版本与这个新版本相一致。尝试降级到pyspark 2.3.2,这为我修复了它 编辑:为了更清楚,您的PySpark版本需要与下载的Apache Spark版本相同,否则您可能会遇到兼容性问题 使用检查pyspark的版本 皮普冷冻
在程序末尾使用SparkContext().stop()停止这种情况。以下步骤解决了我的问题: -将其降级至2.3.2 -正在将PYTHONPATH添加为系统环境变量,其值为
%SPARK\u HOME%\python;%SPARK\u HOME%\python\lib\py4j--src.zip:%PYTHONPATH%
注意:在上面给出的值中使用正确的版本,不要完全复制。不要编辑环境变量,只需确保Python环境(带有pyspark的环境)与Spark文件夹中\Python\lib\dictionary中的zip文件具有相同的py4j版本即可。例如,我的系统上的d:\Programs\Spark\python\lib\py4j-0.10.7-src.zip,用于Spark 2.3.2。它是作为Spark存档文件的一部分提供的py4j版本。尝试在文件顶部添加以下内容:
import findspark
findspark.init()
请看简单地说,这是关于python和java的,因为必须说出来的媒介(py4j)是不同的,就是这样。我有同样的问题,上面所有的答案都是有效的,如果你正确使用它们,它们会起作用,要么你定义一个系统变量来告诉它们应该使用哪一个py4j,或者您可以进行一些取消安装和重新安装,以便每个人都在同一页面上。您需要设置以下环境来设置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
并在文件顶部使用:
import findspark
findspark.init()
当我从anaconda命令提示符下下载新版本的pip安装时,我也遇到了同样的问题 使用代码文件顶部时:
进口金融园 findspark.init(“c:\spark”)
此代码解决了我的问题。尝试安装spark 2.4.5版本,并将spark home path设置为此版本。即使我在更改版本后也遇到了这个问题,它也为我解决了。你关闭了SparkContext吗?另外,你能展示完整的代码吗?这是在我有机会使用它之前发生的。我正在创建它并得到了错误。如果您执行
print(conf)
,您会得到什么?请尝试sc=SparkContext(conf)
,他们当时发布了PySpark 2.4.0的哪个版本?当我发布这篇文章时,没有2.4.0可供下载,只有2.3.2。只要pyspark版本==apachesparks,您就应该是好的。我会更新帖子这让我很困惑。当我pip安装pyspark==2.4.0
或任何版本时,它会在我的站点libs中安装Spark的一个版本。我的用例是尝试在流媒体包中使用KafkaUtils,而不安装本地Spark。这样做仍然会导致py4j网关在尝试加载类时出错。python PypSpark安装附带的Spark版本如何在不涉及任何其他内容的情况下尝试使用它?导入findspark在python 3.7中不存在,您能否再次检查我正在尝试使用anaconda Navigator的右侧@mugurkt使用导入选项。根据您的回答,我不得不删除了不兼容的py4j版本(最初通过anaconda navigator安装)附带的pyspark,然后通过命令行提示符用“pip install pyspark”重新安装了pyspark,现在它对我来说很好用。当然,对于那些使用*nix的用户,这转换为:export PYTHONPATH=$SPARK\u HOME\python:$SPARK\u HOME\python\lib\py4j--src.zip:$PYTHONPATH