【问题标题】:pyspark error does not exist in the jvm error when initializing SparkContext初始化SparkContext时jvm错误中不存在pyspark错误
【发布时间】:2019-04-09 06:11:37
【问题描述】:

我在 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 但这也不起作用。

【问题讨论】:

  • 您是否关闭了 SparkContext?另外,你能显示完整的代码吗?
  • 这是在我有机会使用它之前发生的。我正在创建它并收到错误。
  • 如果你这样做print(conf)会得到什么?
  • 试试sc = SparkContext(conf)

标签: python python-3.x apache-spark pyspark amazon-emr


【解决方案1】:

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

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

之所以觉得这样可行,是因为我在使用conda安装pyspark的时候,也下载了一个py4j版本,可能与特定版本的spark不兼容,所以好像打包了自己的版本。

【讨论】:

  • 没错@mugurkt。在您的回答的指导下,我不得不删除了不兼容的 py4j 版本(最初通过 anaconda navigator 安装)附带的 pyspark,然后通过命令行提示符使用“pip install pyspark”重新安装了 pyspark,现在它对我来说效果很好。跨度>
  • 当然,对于那些使用 *nix 的人来说,这转换为:export PYTHONPATH=$SPARK_HOME\python:$SPARK_HOME\python\lib\py4j--src.zip:$PYTHONPATH跨度>
【解决方案2】:

PySpark 最近发布了 2.4.0,但没有与此新版本一致的 spark 稳定版本。尝试降级到 pyspark 2.3.2,这为我解决了问题

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

使用

检查 pyspark 的版本

点冻结

【讨论】:

  • 当时他们为哪个版本发布了 PySpark 2.4.0?
  • 当我发表这篇文章时,spark.apache.org/downloads.html 没有可供下载的 2.4.0,只有 2.3.2。只要 pyspark 版本 == apache sparks 你应该很好。我会更新帖子
  • 这让我很困惑。当我pip install pyspark==2.4.0 或任何版本时,它会在我的站点库中安装一个版本的 Spark。我的用例是尝试在流包中使用 KafkaUtils,而不安装本地 Spark。这样做仍然会导致尝试加载类的 py4j 网关错误。 python pyspark 安装附带的 Spark 版本如何在不涉及任何其他内容的情况下尝试使用它?
【解决方案3】:

在程序结束时使用 SparkContext().stop() 来阻止这种情况。

【讨论】:

    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

      您可以确保 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】:

        尝试在文件顶部添加:

        import findspark
        findspark.init()
        

        https://github.com/minrk/findspark

        【讨论】:

        • import findspark 在 python 3.7 中不存在,你能重新检查一下我正在尝试使用 anaconda navigator 的导入选项
        【解决方案7】:

        为了简单起见,这都是关于 python 和 java 不能说话,因为必须说出来的媒介(py4j)是不同的,就是这样。我有同样的问题,以上所有答案都是有效的并且会起作用如果您正确使用它们,您可以定义一个系统变量来告诉他们应该使用哪个 py4j,或者您可以进行一些卸载和安装,以便每个人都在同一页面上。

        【讨论】:

          【解决方案8】:

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

          【讨论】:

            【解决方案9】:

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

            当我使用代码文件的顶部时:
            导入 findspark findspark.init("c:\spark")

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

            【讨论】:

              【解决方案10】:

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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2022-01-25
                • 2019-02-23
                • 1970-01-01
                • 1970-01-01
                • 2017-11-15
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多