Ошибка Pyspark - Неподдерживаемый файл основного файла версии 55

FIX:

Чтобы исправить эту проблему, я отредактировал bash_profile, чтобы обеспечить использование java 1.8 в качестве глобального значения по умолчанию следующим образом:

touch ~/.bash_profile; open ~/.bash_profile

Добавление

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

и сохранение в текстовом редакторе.

UPDATE

Из-за изменений лицензии от Oracle указанное выше исправление может не работать, и вы можете столкнуться с проблемами при установке через brew. Для установки Java 8 вам может потребоваться следовать этому руководству.


ВОПРОС:

Я пытаюсь установить Spark на мой Mac. Я использовал home-brew для установки spark 2.4.0 и Scala. Я установил 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

Ответ 1

Пока Spark не поддерживает Java 11 (о чем можно было бы упомянуть в самой последней документации, когда она есть), вы должны добавить флаг, чтобы установить версию Java на Java 8.

По состоянию на Spark 2.4.x

Spark работает на Java 8, Python 2. 7+/3. 4+ и R 3. 1+. Для API Scala Spark 2.4.4 использует Scala 2.12. Вам нужно будет использовать совместимую версию Scala (2.12.x)

На Mac я могу сделать это в моем .bashrc,

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

Вы также можете установить это в spark-env.sh вместо того, чтобы устанавливать переменную для всего своего профиля.

И вам нужно будет установить Java 8 в дополнение к существующей Java 11

Ответ 2

Я столкнулся с этой проблемой при запуске Jupyter Notebook и Spark с использованием Java 11. Я установил и настроил для 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)

Теперь я могу успешно запускать Spark в блокноте Jupyter. Вышеуказанные шаги основаны на следующем руководстве: https://www.digitalocean.com/community/tutorials/how-to-install-java-with-apt-on-ubuntu-18-04

Ответ 3

С помощью 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

В Windows (Windows 10) вы можете решить эту проблему, установив jdk-8u201-windows-x64.exe и сбросив системную переменную среды на правильную версию JAVA JDK:

JAVA_HOME → C:\Program Files\Java\jdk1.8.0_201.

Не забудьте перезапустить терминал, иначе сброс переменной среды не начнется.

Ответ 5

У меня та же проблема в Windows, и я добавил JAVA_HOME в путь переменной среды:

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