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

时间:2018-11-08 23:37:21

标签: 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()

此操作失败,并显示以下错误:

  

spark = SparkSession.builder.appName('Basics')。getOrCreate()   追溯(最近一次通话):     文件“”,第1行,位于     getOrCreate中的文件“ C:\ Tools \ Anaconda3 \ lib \ site-packages \ pyspark \ sql \ session.py”,行173       sc = SparkContext.getOrCreate(sparkConf)     getOrCreate中的第349行的文件“ C:\ Tools \ Anaconda3 \ lib \ site-packages \ pyspark \ context.py”       SparkContext(conf = conf或SparkConf())      init 中的文件“ C:\ Tools \ Anaconda3 \ lib \ site-packages \ pyspark \ context.py”,第118行       conf,jsc,profiler_cls)     _do_init中的文件“ C:\ Tools \ Anaconda3 \ lib \ site-packages \ pyspark \ context.py”,第195行       self._encryption_enabled = self._jvm.PythonUtils.getEncryptionEnabled(self._jsc)      getattr 中的文件“ C:\ Tools \ Anaconda3 \ lib \ site-packages \ py4j \ java_gateway.py”,行1487       “ {0}。{1}在JVM中不存在”。format(self._fqn,名称))    py4j.protocol.Py4JError:JVM中不存在org.apache.spark.api.python.PythonUtils.getEncryptionEnabled

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

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

9 个答案:

答案 0 :(得分:9)

使用findspark可以解决问题:

安装findspark

$pip install findspark

在您的代码中使用:

import findspark
findspark.init() 

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

答案 1 :(得分:4)

在Windows上遇到了同样的问题,我发现我的Python的 py4j pyspark 版本与预期的不同。 通过在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-packages

答案 2 :(得分:2)

1。检查您的环境变量

由于environemnt变量设置不正确,您将收到“ py4j.protocol.Py4JError:org.apache.spark.api.python.PythonUtils.getEncryptionEnabled在JVM中不存在”。

检查是否在.bashrc文件上正确设置了环境变量。对于Unix和Mac,变量应如下所示。您可以在主路径中找到.bashrc文件。

注意:请勿复制并粘贴以下行,因为您的Spark版本可能与下面提到的版本不同。

    Dim Myconn As New OleDbConnection(constr)
    Dim adapter As New OleDbDataAdapter()
    Dim command As New OleDbCommand()
    Dim sql = "select descriptionofgoods,remarks,mode from tabel1 INNER JOIN table2 ON tabel1.id = tabel2.id inner join tabel3 on tabel1.id = tabel3.id;"
    Try
        Myconn.Open()
        dt.Clear()
        If TextBox2.Text > "" Then
            sql = sql & " and  [id] = ? "
            command.Parameters.AddWithValue("id", TextBox1.Text)
        End If
        command.Connection = Myconn
        command.CommandText = sql
        adapter.SelectCommand = command
        adapter.Fill(dt)
        If dt.Rows.Count > 0 Then
            DataGridView1.DataSource = dt
            DataGridView1.Refresh()
        Else
            MessageBox.Show("ITEM NOT FOUND")
        End If
    Catch exp As Exception
        Throw exp
    Finally
        If Myconn IsNot Nothing Then Myconn.Close()
    End Try
End Sub

如果您在Windows上运行,请打开环境变量窗口,然后在下面添加/更新。

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

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

2。使用findspark

通过运行$ pip install findspark安装findspark软件包,并将以下行添加到pyspark程序中

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%

3。将pyspark和py4j模块复制到Anaconda lib

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

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

从中复制 py4j 文件夹:

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

C:\apps\opt\spark-3.0.0-bin-hadoop2.7\python\lib\py4j-0.10.9-src.zip\

然后,从

复制 pyspark 文件夹
C:\Programdata\anaconda3\Lib\site-packages\.

C:\apps\opt\spark-3.0.0-bin-hadoop2.7\python\lib\pyspark.zip\

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

积分https://sparkbyexamples.com/pyspark/pyspark-py4j-protocol-py4jerror-org-apache-spark-api-python-pythonutils-jvm/

答案 3 :(得分:2)

我遇到了同样的问题。在我使用 spark 2.4.6 的情况下,安装与 spark 版本相同的 pyspark 2.4.6 或 2.4.x 解决了该问题,因为 pyspark 3.0.1(pip install pyspark 将安装最新版本)提出了问题。

答案 4 :(得分:2)

您只需要安装旧版本的 pyspark 。此版本有效"pip install pyspark==2.4.7"

答案 5 :(得分:1)

我最近遇到了这个问题。
错误是-我正在打开普通的jupyter笔记本。
始终打开 Anaconda提示符->键入'pyspark'->它会自动为您打开Jupyter笔记本
之后,您将不会收到此错误。

答案 6 :(得分:1)

如果您安装了 pyspark 3.1 并且您的本地 spark 是 2.4(我的意思是版本不兼容),则可能会发生这种情况 就我而言,为了克服这个问题,我卸载了 spark 3.1 并切换到 pip install pyspark 2.4。

我的建议是检查版本不兼容问题以及这里的其他答案。

答案 7 :(得分:0)

如@ pyspark error does not exist in the jvm error when initializing SparkContext所述,添加PYTHONPATH环境变量(值为:

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

答案 8 :(得分:0)

如果您更新了 pyspark 或 spark

如果像我一样问题发生在你更新了两者之一之后你不知道 Pyspark 和 Spark 版本需要匹配,正如 Pyspark PyPi 存储库所说:

<块引用>

注意:如果您将它与 Spark 独立集群一起使用,您必须确保版本(包括次要版本)匹配或您可能会遇到奇怪的错误。

因此升级/降级 Pyspark/Spark 以匹配其版本以解决问题。

升级 Spark,请遵循:https://sparkbyexamples.com/pyspark/pyspark-py4j-protocol-py4jerror-org-apache-spark-api-python-pythonutils-jvm/