py4j.protocol.Py4JError:JVM中不存在org.apache.spark.api.python.PythonUtils.getEncryptionEnabled

bvk*_*ear 8 python python-3.x pyspark

我当前在使用JRE:1.8.0_181,Python:3.6.4,spark:2.3.2

我正在尝试在Python中执行以下代码:

from pyspark.sql import SparkSession

spark = SparkSession.builder.appName('Basics').getOrCreate()
Run Code Online (Sandbox Code Playgroud)

失败并显示以下错误:

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行,在orOrCreate SparkContext(conf = conf或SparkConf())文件“ C:\ Tools \ Anaconda3 \ lib \ site-packages \ pyspark \ context.py”,第118行,在初始 conf,jsc,profiler_cls中)文件“ C:\ Tools \ Anaconda3 \ lib \ _do_init self._encryption_enabled = self._jvm.PythonUtils.getEncryptionEnabled(self._jsc)文件中的“ site-packages \ pyspark \ context.py”,第195行,文件“ C:\ Tools \ Anaconda3 \ lib \ site-packages \ py4j \ java_gateway 。py”,第1487行,在getattr中 “ {0}。{1}在JVM中不存在”。format(self._fqn,名称)) py4j.protocol.Py4JError:org.apache.spark.api.python.PythonUtils.getEncryptionEnabled在JVM中不存在

有人对这里可能存在的潜在问题有任何想法吗?

在此感谢任何帮助或反馈。谢谢!

bvk*_*ear 20

如上所述,在初始化 SparkContext 时jvm 错误中不存在 @pyspark 错误,添加PYTHONPATH环境变量(值为:

%SPARK_HOME%\python;%SPARK_HOME%\python\lib\py4j-<version>-src.zip:%PYTHONPATH%,
- 只需检查文件夹中的py4j版本spark/python/lib)有助于解决此问题。

  • 我遵循了上面的相同步骤,它对我有用。只需确保您下载的 Spark 版本与使用 pip 命令安装的版本相同即可。设置此路径后,只需重新启动系统即可。 (4认同)
  • 这对我不起作用 (2认同)

sm7*_*sm7 18

使用 findspark 有望解决问题:

安装 findspark

$pip install findspark

在你的代码中使用:

import findspark
findspark.init() 
Run Code Online (Sandbox Code Playgroud)

您可以选择在init上面的方法中指定“/path/to/spark” ;findspark.init("/path/to/spark")

  • 是的,您可以在导入 pyspark 之前“findspark.init()” (3认同)

mou*_*afa 10

解决方案#1。检查您的环境变量

由于环境变量设置不正确,您收到“py4j.protocol.Py4JError: org.apache.spark.api.python.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
Run Code Online (Sandbox Code Playgroud)

如果您在 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%
Run Code Online (Sandbox Code Playgroud)

设置环境变量后,重新启动工具或命令提示符。

解决方案#2。使用 findspark

通过运行 $pip install findspark 安装 findspark 包并将以下几行添加到您的 pyspark 程序中

import findspark
findspark.init() 
# you can also pass spark home path to init() method like below
# findspark.init("/path/to/spark")
Run Code Online (Sandbox Code Playgroud)

解决方案#3。将 pyspark 和 py4j 模块复制到 Anaconda lib

有时在更改/升级 Spark 版本后,由于 pyspark 版本和 anaconda 库中可用的 pyspark 版本不兼容,您可能会收到此错误。为了纠正它

注意:从 zip 文件中复制指定的文件夹,并确保按照开头所述正确设置环境变量。

从以下位置复制py4j文件夹:

C:\apps\opt\spark-3.0.0-bin-hadoop2.7\python\lib\py4j-0.10.9-src.zip\
Run Code Online (Sandbox Code Playgroud)

C:\Programdata\anaconda3\Lib\site-packages\.
Run Code Online (Sandbox Code Playgroud)

并且,从以下位置复制pyspark文件夹:

C:\apps\opt\spark-3.0.0-bin-hadoop2.7\python\lib\pyspark.zip\
Run Code Online (Sandbox Code Playgroud)

C:\Programdata\anaconda3\Lib\site-packages\
Run Code Online (Sandbox Code Playgroud)

有时,您可能需要重新启动系统以影响 eh 环境变量。

归功于https : //sparkbyexamples.com/pyspark/pyspark-py4j-protocol-py4jerror-org-apache-spark-api-python-pythonutils-jvm/


小智 9

你只需要安装旧版本的 pyspark 。这个版本可以使用“pip install pyspark==2.4.7”

  • 这很有帮助!PySpark 版本需要与 Spark 版本匹配。 (3认同)