pyspark错误does not exist in jvm error when initializing SparkContext

pyspark error does not exist in the jvm error when initializing SparkContext

我在 emr 上使用 spark 并编写 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 但这也不起作用。

我刚刚在我的 Windows 设备上安装了全新的 pyspark,但遇到了完全相同的问题。以下内容似乎有所帮助:

转到系统环境变量并使用以下值将 PYTHONPATH 添加到其中:%SPARK_HOME%\python;%SPARK_HOME%\python\lib\py4j-<version>-src.zip:%PYTHONPATH%,只需检查 spark/python/lib 文件夹中的 py4j 版本即可。

我之所以认为这个可行是因为我在使用conda安装pyspark时,它还下载了一个py4j版本,可能与特定版本的spark不兼容,所以它似乎打包了自己的版本。

PySpark 最近发布了 2.4.0,但没有与此新版本一致的 spark 稳定版本。尝试降级到 pyspark 2.3.2,这对我来说已修复

编辑:为了更清楚,您的 PySpark 版本需要与下载的 Apache Spark 版本相同,否则您可能 运行 遇到兼容性问题

使用

检查pyspark的版本

pip freeze

在程序的最后使用SparkContext().stop()来停止这种情况。

以下步骤解决了我的问题: - 将其降级到 2.3.2 - 添加 PYTHONPATH 作为系统环境变量,值为 %SPARK_HOME%\python;%SPARK_HOME%\python\lib\py4j-<version>-src.zip:%PYTHONPATH% 注意:在上面给出的值中使用正确的版本,不要完全复制。

您可以不编辑环境变量,而是确保 Python 环境(带有 pyspark 的环境)也具有与 \python\lib\ 字典中的 zip 文件相同的 py4j 版本在你的 Spark 文件夹中。例如,d:\Programs\Spark\python\lib\py4j-0.10.7-src.zip 在我的系统上,对于 Spark 2.3.2。它是作为 Spark 存档文件的一部分提供的 py4j 版本。

尝试在文件顶部添加:

import findspark
findspark.init()

https://github.com/minrk/findspark

为了简单起见,都是关于 python 和 java 不能说话的,因为必须说出来的媒介 (py4j) 不同,那是 it.I同样的问题和上面所有的答案都是有效的,如果你正确使用它们就会起作用,要么你定义一个系统变量来告诉他们应该使用哪个 py4j,要么你可以做一些 un-installation 并重新安装,这样每个人将在同一页上。

您需要设置以下环境来设置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()

当我从 anaconda 命令提示符下载新版本 pip install 时,我遇到了同样的问题。

当我使用代码文件的顶部时:

import findspark
findspark.init("c:\spark")

这段代码解决了我的问题。

尝试安装spark 2.4.5版本,并设置spark home路径为该版本。即使我在更改版本后遇到问题,它也为我解决了。