簡體   English   中英

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

[英]py4j.protocol.Py4JError: org.apache.spark.api.python.PythonUtils.getEncryptionEnabled does not exist in the JVM

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

任何人都知道這里可能存在的潛在問題是什么?

感謝這里的任何幫助或反饋。 謝謝!

如上所述, 在初始化 SparkContext 時jvm 錯誤中不存在 @pyspark 錯誤,添加PYTHONPATH環境變量(值為:

%SPARK_HOME%\\python;%SPARK_HOME%\\python\\lib\\py4j-<version>-src.zip:%PYTHONPATH% ,
- 只需檢查您的spark/python/lib文件夾中的py4j版本)有助於解決此問題。

使用 findspark 有望解決問題:

安裝 findspark

$pip install findspark

在你的代碼中使用:

import findspark
findspark.init() 

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

解決方案#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

如果您在 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%

設置環境變量后,重新啟動工具或命令提示符。

解決方案#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")

解決方案#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\

C:\Programdata\anaconda3\Lib\site-packages\.

並且,從以下位置復制pyspark文件夾:

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

C:\Programdata\anaconda3\Lib\site-packages\

有時,您可能需要重新啟動系統以影響 eh 環境變量。

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

在 Windows 上遇到了同樣的問題,我發現我的 Python 的py4jpyspark版本與預期的 spark 版本不同。 通過將zip 中的 python 模塊復制來解決: py4j-0.10.8.1-src.zippyspark.zip (在spark-3.0.0-preview2-bin-hadoop2.7\\python\\lib 中找到)到C:\\Anaconda3\\ Lib\\site-packages

我最近遇到了這個問題。
錯誤是 - 我正在打開普通的 jupyter 筆記本。
始終打開Anaconda Prompt -> 輸入 'pyspark' -> 它會自動為你打開 Jupyter notebook
之后,您將不會收到此錯誤。

如果使用 pycharm - 下載 spark 2.4.4
- 設置/項目結構/addcontent root/在spark.2.4.4/python/lib中添加py4j.0.10.8.1.zip ve pyspark.zip

我有同樣的問題。 在我使用 spark 2.4.6 的情況下,安裝與 spark 版本相同的 pyspark 2.4.6 或 2.4.x,解決了問題,因為 pyspark 3.0.1( pip install pyspark將安裝最新版本)提出了問題。

你只需要安裝一個舊版本的 pyspark 。這個版本有效“pip install pyspark==2.4.7”

如果您安裝了 pyspark 3.1 並且您的本地 spark 是 2.4,則可能會發生這種情況(我的意思是版本不兼容)在我的情況下,為了克服這個問題,我卸載了 spark 3.1 並切換到 pip install pyspark 2.4。

我的建議是在這里檢查版本不兼容問題以及其他答案。

如果您更新了 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/

如果在本地 ( https://github.com/awslabs/aws-glue-libs ) 中使用 Spark 和 AWS Glue 庫,請確保 Spark、PySpark 和 AWS Glue 庫的版本都正確對齊。 截至目前,當前有效的組合是:

aws-glue-libs 分支 膠版 星火版
膠水-0.9 0.9 2.2.1
膠水-1.0 1.0 2.4.3
膠水2.0 2.0 2.4.3
掌握 3.0 3.1.1

如果從以前的答案中還沒有清楚,您的 pyspark 包版本必須與安裝的 Apache Spark 版本相同。

例如,我使用 Ubuntu 和 PySpark 3.2。 在環境變量(bashrc)中:

export SPARK_HOME="/home/ali/spark-3.2.0-bin-hadoop3.2"
export PYTHON_PATH=$SPARK_HOME/python:$PYTHON_PATH

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM