Ошибка 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