Pyspark错误-不支持的类文件主要版本55

时间:2018-12-02 18:16:38

标签: java python macos apache-spark pyspark

FIX:

要解决此问题,我编辑了bash_profile,以确保将java 1.8用作全局默认值,如下所示:

touch ~/.bash_profile; open ~/.bash_profile

添加

export JAVA_HOME=$(/usr/libexec/java_home -v 1.8) 

并保存在文本编辑中。

问题:

我正在尝试在Mac上安装Spark。我用自制软件安装了spark 2.4.0和Scala。我已经在Anaconda环境中安装了PySpark,并且正在使用PyCharm进行开发。我已经导出到我的bash个人资料:

export SPARK_VERSION=`ls /usr/local/Cellar/apache-spark/ | sort | tail -1`
export SPARK_HOME="/usr/local/Cellar/apache-spark/$SPARK_VERSION/libexec"
export PYTHONPATH=$SPARK_HOME/python/:$PYTHONPATH
export PYTHONPATH=$SPARK_HOME/python/lib/py4j-0.9-src.zip:$PYTHONPATH

但是我无法使其正常工作。

我怀疑这是由于Java版本读取了回溯。我非常感谢您为解决此问题提供的帮助。请提供我的信息,以提供除追溯​​之外有用的信息。

我收到以下错误:

Traceback (most recent call last):
  File "<input>", line 4, in <module>
  File "/anaconda3/envs/coda/lib/python3.6/site-packages/pyspark/rdd.py", line 816, in collect
    sock_info = self.ctx._jvm.PythonRDD.collectAndServe(self._jrdd.rdd())
  File "/anaconda3/envs/coda/lib/python3.6/site-packages/py4j/java_gateway.py", line 1257, in __call__
    answer, self.gateway_client, self.target_id, self.name)
  File "/anaconda3/envs/coda/lib/python3.6/site-packages/py4j/protocol.py", line 328, in get_return_value
    format(target_id, ".", name), value)
py4j.protocol.Py4JJavaError: An error occurred while calling z:org.apache.spark.api.python.PythonRDD.collectAndServe.
: java.lang.IllegalArgumentException: Unsupported class file major version 55

11 个答案:

答案 0 :(得分:15)

直到Spark被编译为支持Java 11之前,您都必须添加

$('#datatable').DataTable({"pageLength": -1});

或者找到export JAVA_HOME=$(/usr/libexec/java_home -v 1.8) 并在那里做

您需要先spark-env.sh

答案 1 :(得分:5)

使用Java 11运行Jupyter Notebook和Spark时遇到了这个问题。我使用以下步骤为Java 8安装和配置了该软件。

安装Java 8:

$ sudo apt install openjdk-8-jdk

由于我已经安装了Java 11,因此我可以使用以下命令将默认Java设置为版本8:

$ sudo update-alternatives --config java

选择Java 8,然后确认您所做的更改:

$ java -version

输出应类似于:

openjdk version "1.8.0_191"
OpenJDK Runtime Environment (build 1.8.0_191-8u191-b12-2ubuntu0.18.04.1-b12)
OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)

我现在能够在Jupyter Notebook中成功运行Spark。上面的步骤基于以下指南:https://www.digitalocean.com/community/tutorials/how-to-install-java-with-apt-on-ubuntu-18-04

答案 2 :(得分:2)

听到的问题是PySpark需要Java 8的某些功能。 Spark 2.2.1在Java 9及更高版本中存在问题。推荐的解决方案是安装Java 8。

您可以专门安装Java-8,并将其设置为默认Java,然后重试。

要安装Java 8,

sudo apt install openjdk-8-jdk

要更改默认的Java版本,请遵循this。您可以使用命令

 update-java-alternatives --list

列出所有可用的Java版本。

通过运行以下命令设置默认值:

sudo update-alternatives --config java

选择所需的Java版本。在提供的列表中提供准确的号码。 然后检查您的Java版本java -version,并应对其进行更新。还要设置JAVA_HOME变量。

要设置JAVA_HOME,必须找到特定的Java版本和文件夹。进行this的休闲讨论,以获得有关设置java home变量的完整信息。由于我们将使用Java 8,因此我们的文件夹路径为/usr/lib/jvm/java-8-openjdk-amd64/。只需转到/usr/lib/jvm文件夹并吱吱叫什么是可使用的文件夹。使用ls -l查看文件夹及其软链接,因为这些文件夹对于某些Java版本可能是快捷方式。然后转到主目录cd ~并编辑bashrc文件

cd ~
gedit .bashrc

然后将波纹管添加到文件中,保存并退出。

## SETTING JAVA HOME
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=$PATH:$JAVA_HOME/bin

答案 3 :(得分:1)

使用pycharm,我发现在开始时通过 findspark java8 os 添加了火花位置。脚本最简单的解决方案:

import findspark
import os
spark_location='/opt/spark-2.4.3/' # Set your own
java8_location= '/usr/lib/jvm/java-8-openjdk-amd64' # Set your own
os.environ['JAVA_HOME'] = java8_location
findspark.init(spark_home=spark_location) 

答案 4 :(得分:1)

对于Debian 10'buster'用户,nvidia-openjdk-8-jre软件包中提供了Java 8 JRE。

使用

安装
sudo apt install nvidia-openjdk-8-jre

然后在运行JAVA_HOME时设置pyspark,例如:

JAVA_HOME=/usr/lib/jvm/nvidia-java-8-openjdk-amd64/ pyspark

答案 5 :(得分:1)

只想在这里加两分钱,因为它为使用 PyCharm (特别是运行配置)的人们节省了几个小时的时间。通过修改JAVA_HOME和PATH env变量将.bashrc.bash_profile更改为指向Java 8之后(就像这里的大多数人所建议的那样),您会注意到,当您使用的运行配置运行Spark时PyCharm,它仍然不会选择正确的Java。似乎PyCharm存在一些问题(我在Mac Catalina中使用的是PyCharm Professional 2020.2)。另外,当您使用PyCharm终端运行它时,它可以正常工作。确认PyCharm出了点问题。为了使PyCharm的运行配置能够使用新的JAVA,我必须在运行配置中专门添加JAVA_HOME环境变量,如下所示-

enter image description here

成功了!

另一个可行的方法是在运行配置的Include system environment variables option窗口中检查Environment Variables(请参见上面的屏幕截图),然后重新启动PyCharm

答案 6 :(得分:0)

我在Windows中有相同的问题,并且我已将JAVA_HOME添加到环境变量路径中:

  

JAVA_HOME:C:\ Program Files \ Java \ jdk-11.0.1

答案 7 :(得分:0)

在Windows(Windows 10)上,您可以通过安装jdk-8u201-windows-x64.exe并将系统环境变量重置为Java JDK的正确版本来解决此问题:

JAVA_HOME-> C:\ Program Files \ Java \ jdk1.8.0_201。

别忘了重新启动终端,否则环境变量的重置不会生效。

答案 8 :(得分:0)

您好,实际上请确保您输入了正确的SPARK_HOME PATH,您可以使用以下python脚本找到它:https://github.com/apache/spark/blob/master/python/pyspark/find_spark_home.py

python3 find_spark_home.py 

/usr/local/lib/python3.7/site-packages/pyspark

在我的Mac上,在终端上:

vim ~/.bashrc

并添加路径:

export JAVA_HOME=/Library/java/JavaVirtualMachines/adoptopenjdk-8.jdk/contents/Home/

export SPARK_HOME=/usr/local/lib/python3.7/site-packages/pyspark

export PYSPARK_PYTHON=/usr/local/bin/python3

然后最后应用更改

source ~/.bashrc

答案 9 :(得分:0)

在macOS上:使用以下命令在笔记本电脑上安装Java8:

brew tap AdoptOpenJDK/openjdk
brew cask install adoptopenjdk8

答案 10 :(得分:-1)

由于您在JAVA_HOME环境变量上设置的Java版本而发生此问题。

OLD JAVA路径:/usr/lib/jvm/java-1.11.0-openjdk-amd64

解决方案:将JAVA_HOME设置为/ usr / lib / jvm / java-8-openjdk-amd64

它将起作用!!!

请注意我的错误是:

文件“ /home/tms/myInstallDir/spark-2.4.5-bin-hadoop2.7/python/pyspark/rdd.py”,行816,在收集中 sock_info = self.ctx._jvm.PythonRDD.collectAndServe(self._jrdd.rdd()) 在调用中的文件“ /home/tms/myInstallDir/spark-2.4.5-bin-hadoop2.7/python/lib/py4j-0.10.7-src.zip/py4j/java_gateway.py”,行1257 装饰中的文件“ /home/tms/myInstallDir/spark-2.4.5-bin-hadoop2.7/python/pyspark/sql/utils.py”,第79行 引发IllegalArgumentException(s.split(':',1)[1],stackTrace) pyspark.sql.utils.IllegalArgumentException:u'不支持的类文件主版本55'