Использование Scala 2.12 с Spark 2.x

В документации Spark 2.1 упоминается, что

Spark работает на Java 7+, Python 2.6 + / 3.4 + и R 3.1+. Для Scala API Spark 2.1.0 использует Scala 2.11. Вам потребуется совместимая версия Scala (2.11.x).

в выпуске новостей Scala 2.12 также упоминается, что:

Хотя Scala 2.11 и 2.12 в основном совместимы с исходным кодом для облегчения кросс-компоновки, они не совместимы на двоичном уровне. Это позволяет нам постоянно улучшать компилятор Scala и стандартную библиотеку.

Но когда я создаю uber jar (используя Scala 2.12) и запускаю его на Spark 2.1. все работает нормально.

и я знаю, что это не какой-либо официальный источник, а находится в блоге 47 степеней они упомянули, что Spark 2.1 действительно поддерживает Scala 2.12.

Как можно объяснить эти (конфликты?) Фрагменты информации?


person NetanelRabinowitz    schedule 19.03.2017    source источник
comment
Есть формальная разница, т. Е. мы поддерживаем эту версию, мы ее протестировали, и если у вас есть проблемы, то это ошибка на нашей стороне по сравнению с делайте это по-своему, экспериментируйте, если хотите, но если у вас есть проблемы, не возвращайтесь к нытью.   -  person Samson Scharfrichter    schedule 19.03.2017
comment
да, но как это может работать, если scala 2.11 двоично не совместим с 2.12?   -  person NetanelRabinowitz    schedule 20.03.2017
comment
Несовместимость означает, что существует как минимум 1 проблема. Может быть нормально для 99,99% вызовов API. Сколько вы тестировали со своим пользовательским Uber-JAR? Может 15%?   -  person Samson Scharfrichter    schedule 20.03.2017


Ответы (3)


Spark не поддерживает Scala 2.12. Вы можете следить за SPARK-14220 (Сборка и тестирование Spark на Scala 2.12), чтобы обновлять статус.

обновление: добавлен Spark 2.4 экспериментальная поддержка Scala 2.12.

person user7735456    schedule 19.03.2017
comment
мог быть добавлен как комментарий - person jjj; 19.03.2017
comment
Spark 2.4 теперь экспериментально поддерживает Scala 2.12. - person Maziyar; 20.11.2018
comment
Поддержка 2.12 больше не является экспериментальной - теперь это GA - см. Spark 2.4. .1 примечания к выпуску. - person George Hawkins; 07.04.2019
comment
Scala 2.12 может поддерживаться, но с Spark 2.4.x предварительно созданные двоичные файлы скомпилированы с Scala 2.11 (кроме версия 2.4.2). - person ecoe; 11.12.2019

Scala 2.12 официально поддерживается (и требуется) начиная с Spark 3. Резюме:

  • Spark 2.0 - 2.3: Требуется Scala 2.11
  • Spark 2.4: поддерживаются Scala 2.11 и Scala 2.12, но на самом деле не потому, что почти все среды выполнения поддерживают только Scala 2.11.
  • Spark 3: поддерживается только Scala 2.12

Использование среды выполнения Spark, скомпилированной с одной версией Scala, и файла JAR, скомпилированного с другой версией Scala, опасно и вызывает странные ошибки. Например, как указано здесь, использование скомпилированного JAR Scala 2.11 в кластере Spark 3 вызовет эту ошибку: java.lang.NoSuchMethodError: scala.Predef$.refArrayOps([Ljava/lang/Object;)Lscala/collection/mutable/ArrayOps.

Посмотрите на всех бедных пользователей Spark, столкнувшихся с этой самой ошибкой.

Обязательно изучите кросс-компиляцию Scala и поймите оператор %% в SBT, чтобы уменьшить свои страдания. Поддерживать проекты Scala сложно, поэтому рекомендуется свести к минимуму зависимости.

person Powers    schedule 01.12.2020

Чтобы добавить к ответу, я считаю, что это опечатка https://spark.apache.org/releases/spark-release-2-0-0.html не упоминает scala 2.12.

Кроме того, если мы посмотрим на тайминги, Scala 2.12 не был выпущен до ноября 2016 года, а Spark 2.0.0 был выпущен в июле 2016 года.

Ссылки: https://spark.apache.org/news/index.html

www.scala-lang.org/news/2.12.0/

person denvercoder9    schedule 22.09.2017