py4j.protocol.Py4JError:org.apache.spark.api.PythonUtils.getEncryptionEnabled在JVM中不存在
我目前使用的是JRE:1.8.0µ、Python:3.6.4、spark:2.3.2 我正在尝试用Python执行以下代码:py4j.protocol.Py4JError:org.apache.spark.api.PythonUtils.getEncryptionEnabled在JVM中不存在,python,python-3.x,pyspark,Python,Python 3.x,Pyspark,我目前使用的是JRE:1.8.0µ、Python:3.6.4、spark:2.3.2 我正在尝试用Python执行以下代码: from pyspark.sql import SparkSession spark = SparkSession.builder.appName('Basics').getOrCreate() 此操作失败,错误如下: spark=SparkSession.builder.appName('Basics').getOrCreate() 回溯(最近一次呼叫最后一次):
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName('Basics').getOrCreate()
此操作失败,错误如下:
spark=SparkSession.builder.appName('Basics').getOrCreate()
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“C:\Tools\Anaconda3\lib\site packages\pyspark\sql\session.py”,第173行,在getOrCreate中
sc=SparkContext.getOrCreate(sparkConf)
文件“C:\Tools\Anaconda3\lib\site packages\pyspark\context.py”,第349行,在getOrCreate中
SparkContext(conf=conf或SparkConf())
文件“C:\Tools\Anaconda3\lib\site packages\pyspark\context.py”,第118行,在init
形态、jsc、探查器(cls)
文件“C:\Tools\Anaconda3\lib\site packages\pyspark\context.py”,第195行,在\u do\u init中
self.\u encryption\u enabled=self.\u jvm.PythonUtils.getEncryptionEnabled(self.\u jsc)
文件“C:\Tools\Anaconda3\lib\site packages\py4j\java_gateway.py”,第1487行,位于getattr
“{0}.{1}在JVM中不存在”。格式(self.\u fqn,name))
py4j.protocol.Py4JError:org.apache.spark.api.PythonUtils.getEncryptionEnabled在JVM中不存在
有人知道什么是潜在的问题吗
感谢您的帮助或反馈。谢谢大家! 如上所述@,添加PYTHONPATH
环境变量(值为:
%SPARK\u HOME%\python;%SPARK\u HOME%\python\lib\py4j--src.zip:%PYTHONPATH%
,-只需检查您的
spark/python/lib
文件夹中的py4j
版本)有助于解决此问题 如果使用pycharm
-下载spark 2.4.4-设置/项目结构/addcontent root/add py4j.0.10.8.1.zip
spark.2.4.4/python/lib中的ve pyspark.zip在Windows上也有同样的问题,我发现我的python的py4j和pyspark版本与spark的预期版本不同。
通过将zip中的python模块:py4j-0.10.8.1-src.zip和pyspark.zip(位于spark-3.0.0-preview2-bin-hadoop2.7\python\lib中)复制到C:\Anaconda3\lib\site包中来解决这个问题。
错误是-我打开了普通的jupyter笔记本。
始终打开Anaconda提示符->键入“pyspark”->它将自动为您打开Jupyter笔记本。
之后,您将不会出现此错误。使用findspark有望解决此问题: 安装findspark
$pip安装findspark
在您的代码中使用:
import findspark
findspark.init()
您可以选择在上面的
init
方法中指定“/path/to/spark”findspark.init(“/path/to/spark”)
1。检查您的环境变量
由于未正确设置环境变量,您将看到“py4j.protocol.Py4JError:org.apache.spark.api.PythonUtils.getEncryptionEnabled在JVM中不存在”
检查是否在.bashrc文件上正确设置了环境变量。对于Unix和Mac,变量应该如下所示。您可以在主路径上找到.bashrc文件
注意:不要复制和粘贴下面的行,因为您的Spark版本可能与下面提到的版本不同
export SPARK_HOME=/opt/spark-3.0.0-bin-hadoop2.7
export PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/lib/py4j-0.10.9-src.zip:$PYTHONPATH
export PATH=$SPARK_HOME/bin:$SPARK_HOME/python:$PATH
如果您在windows上运行,请打开环境变量窗口,然后在下面添加/更新
SPARK_HOME => /opt/spark-3.0.0-bin-hadoop2.7
PYTHONPATH => %SPARK_HOME%/python;%SPARK_HOME%/python/lib/py4j-0.10.9-src.zip;%PYTHONPATH%
PATH => %SPARK_HOME%/bin;%SPARK_HOME%/python;%PATH%
设置环境变量后,重新启动工具或命令提示符
2。使用findspark
通过运行$pip安装findspark来安装findspark包,并将以下行添加到pyspark程序中
import findspark
findspark.init()
# you can also pass spark home path to init() method like below
# findspark.init("/path/to/spark")
3。将pyspark和py4j模块复制到Anaconda lib
有时在更改/升级Spark版本后,由于anaconda lib上的pyspark版本和pyspark版本不兼容,您可能会遇到此错误。为了纠正它
注意:从zip文件内部复制指定的文件夹,并确保已按开头所述正确设置环境变量
从以下位置复制py4j文件夹:
C:\apps\opt\spark-3.0.0-bin-hadoop2.7\python\lib\py4j-0.10.9-src.zip\
C:\apps\opt\spark-3.0.0-bin-hadoop2.7\python\lib\pyspark.zip\
到
并从以下位置复制pyspark文件夹:
C:\apps\opt\spark-3.0.0-bin-hadoop2.7\python\lib\py4j-0.10.9-src.zip\
C:\apps\opt\spark-3.0.0-bin-hadoop2.7\python\lib\pyspark.zip\
到
有时,您可能需要重新启动系统以影响eh环境变量
归功于:我也有同样的问题。在我使用spark 2.4.6的情况下,安装pyspark 2.4.6或2.4.x(与spark相同的版本)修复了这个问题,因为pyspark 3.0.1(
pip install pyspark
将安装最新版本)提出了这个问题。您只需要安装pyspark的旧版本。这个版本的工作原理是“pip install pyspark==2.4.7”如果您更新了pyspark或spark
如果像我一样,问题发生在您更新了其中一个之后,而您不知道Pyspark和Spark版本需要匹配,正如Pyspark PyPi repo所说:
注意:如果您将其用于Spark单机群集,则必须确保版本(包括次要版本)匹配,否则您可能会遇到异常错误
因此,升级/降级Pyspark/Spark以匹配其版本以解决问题
要升级Spark,请执行以下操作:如果您安装了pip pyspark 3.1,并且您的本地Spark为2.4(我指的是版本不兼容),则可能会发生这种情况 在我的例子中,为了克服这个问题,我卸载了spark 3.1并切换到pip安装pyspark 2.4
我在这里的建议是检查版本不兼容问题以及这里的其他答案。你可以试试这个:它对我有效。我们是否确定应该在
%SPARK\u HOME%\python
后面加一个分号?我遵循了上面的相同步骤,它对我有效。只要确保你的spark版本是downlo