wake-up-neo.net

Pyspark-Fehler - Nicht unterstützte Klassendatei, Hauptversion 55

FIX:

Um dieses Problem zu beheben, bearbeitete ich das bash_profile, um sicherzustellen, dass Java 1.8 wie folgt als globaler Standard verwendet wird:

touch ~/.bash_profile; open ~/.bash_profile

Hinzufügen 

export Java_HOME=$(/usr/libexec/Java_home -v 1.8) 

und speichern innerhalb der Textbearbeitung.

FRAGE:

Ich versuche Spark auf meinem Mac zu installieren. Ich habe Home-Brew verwendet, um Spark 2.4.0 und Scala zu installieren. Ich habe PySpark in meiner Anaconda-Umgebung installiert und benutze PyCharm für die Entwicklung. Ich habe in mein Bash-Profil exportiert:

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

Ich kann es jedoch nicht zum Laufen bringen. 

Ich vermute, das liegt an der Java-Version vom Lesen des Tracebacks. Ich würde mich wirklich über eine Hilfe freuen, die das Problem behoben hat. Bitte kommentieren Sie, ob ich Informationen zur Verfügung stellen kann, die über das Traceback hinaus hilfreich sind.

Ich erhalte folgende Fehlermeldung: 

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
3
avocet

Bis Spark zur Unterstützung von Java 11 kompiliert ist, müssen Sie hinzufügen 

export Java_HOME=$(/usr/libexec/Java_home -v 1.8)

Oder finden Sie den spark-env.sh und tun Sie es dort

Sie müssen zuerst brew cask install Java8 eingeben 

4
cricket_007

Ich bin auf dieses Problem gestoßen, als ich Jupyter Notebook ausgeführt habe und Spark using Java 11). Ich habe installiert und konfiguriert für Java 8 using die folgenden Schritte.

Installieren Sie Java 8:

$ Sudo apt install openjdk-8-jdk

Da ich Java 11 bereits installiert hatte, setzte ich meinen Standard Java auf Version 8 mit:

$ Sudo update-alternatives --config Java

Wählen Sie Java 8 und bestätigen Sie Ihre Änderungen:

$ Java -version

Die Ausgabe sollte ähnlich sein wie:

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)

Ich kann jetzt Spark erfolgreich in Jupyter Notebook ausführen. Die obigen Schritte basierten auf der folgenden Anleitung: https://www.digitalocean.com/community/tutorials/ Installationsanleitung für Java mit apt on Ubuntu (18-04

28
aoporto

Bei pycharm habe ich festgestellt, dass das Hinzufügen von Funkenort durch Findspark und Java8 mit os am Anfang des Skripts die einfachste lösung:

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
Ferran

Ich habe das gleiche Problem in Windows und ich habe Java_HOME zum Umgebungsvariablenpfad hinzugefügt:

Java_HOME: C:\Programme\Java\jdk-11.0.1 

1
Chaymae Ahmed

Unter Windows (Windows 10) können Sie das Problem lösen, indem Sie jdk-8u201-windows-x64.exe installieren und die Systemumgebungsvariable auf die korrekte Version des Java-JDK zurücksetzen:

Java_HOME -> C:\Programme\Java\jdk1.8.0_201. 

Vergessen Sie nicht, das Terminal neu zu starten, da sonst das Zurücksetzen der Umgebungsvariablen nicht eintritt. 

0
tomasvanoyen