Сначала несколько слов о «почему».
Причина, по которой этот предмет существует, заключается в том, что версии scala не (вообще говоря) двоично-совместимы, хотя в большинстве случаев исходный код совместим.
Таким образом, вы можете взять Scala 2.10 source и скомпилировать его в версии 2.11.x или 2.10.x.Но 2.10.x скомпилированные двоичные файлы (JAR) не могут быть запущены в среде 2.11.x.
Вы можете узнать больше по теме .
Распределения Spark
Итак, пакет Spark, как вы упомянули, создан для Scala 2.11.х время выполнения.
Это означает, что вы не можете запустить свой JAR-файл Scala 2.10.x на кластерном / Spark-экземпляре, который запускается с помощью spark-сборки, созданного на spark.apache.org.
Что быработа такая:
- Вы компилируете свой JAR для scala 2.11.x и сохраняете ту же искру
- Вы перекомпилируете Spark для Scala 2.10 и сохраняете свой JAR как
Каковы ваши варианты
Компилирование собственного JAR-файла для Scala 2.11 вместо 2.10 обычно намного проще, чем компиляция Spark сама по себе (множество зависимостей, чтобы получить право).
ОбычноВаш код Scala построен с использованием sbt, и sbt может указывать на конкретную версию Scala, см., например, этот поток в SO .Необходимо указать:
scalaVersion in ThisBuild := "2.10.0"
Вы также можете использовать sbt для "кросс-сборки" , то есть создавать разные JAR-файлы для разных версий Scala.
crossScalaVersions := Seq("2.11.11", "2.12.2")
Как выбрать версию для Scala
Ну, это "своего рода" мнение.Я бы рекомендовал: выбрать версию Scala, соответствующую вашему производственному кластеру Spark.
Если ваш производственный Spark 2.3 загружен из https://spark.apache.org/downloads.html,, то, как говорится, он использует Scala 2.11, и это то, что выследует использовать тоже.Использование чего-либо еще, на мой взгляд, просто оставляет дверь открытой для различных несовместимостей в будущем.
Придерживайтесь того, что нужно вашему производству.