我目前正在使用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
任何人对这里可能存在的潜在问题有任何想法?
在此感谢任何帮助或反馈。谢谢!
答案 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\
有时,您可能需要重新启动系统才能影响环境变量。
答案 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 PyPi 存储库所说:
<块引用>注意:如果您将它与 Spark 独立集群一起使用,您必须确保版本(包括次要版本)匹配或您可能会遇到奇怪的错误。
因此升级/降级 Pyspark/Spark 以匹配其版本以解决问题。
要升级 Spark,请遵循:https://sparkbyexamples.com/pyspark/pyspark-py4j-protocol-py4jerror-org-apache-spark-api-python-pythonutils-jvm/