Подтвердить что ты не робот

Почему Scala 2.11 и Spark с гребешком приводят к "java.lang.NoSuchMethodError: scala.reflect.api.JavaUniverse.runtimeMirror"?

Я использую Scala 2.11, Spark и Scallop (https://github.com/scallop/scallop). Я использовал sbt для сборки жесткой банки приложения без зависимостей Spark (это можно сделать по адресу: analysis/target/scala-2.11/dtex-analysis_2.11-0.1.jar)

Я могу запустить программу в sbt.

Я попытался запустить его из командной строки следующим образом:

time ADD_JARS=analysis/target/scala-2.11/dtex-analysis_2.11-0.1.jar java -cp /Applications/spark-1.2.0-bin-hadoop2.4/lib/spark-assembly-1.2.0-hadoop2.4.0.jar:analysis/target/scala-2.11/dtex-analysis_2.11-0.1.jar com.dtex.analysis.transform.GenUserSummaryView -d /Users/arun/DataSets/LME -p output -s txt -o /Users/arun/tmp/LME/LME

Появляется следующее сообщение об ошибке:

Исключение в потоке "main" java.lang.NoSuchMethodError: scala.reflect.api.JavaUniverse.runtimeMirror(Ljava/языки/ClassLoader;) Lscala/отражают/апи/JavaUniverse $JavaMirror;   at org.rogach.scallop.package $. (package.scala: 37) at org.rogach.scallop.package $. (package.scala) at com.dtex.analysis.transform.GenUserSummaryView $Conf.delayedEndpoint $ком $дтекс $анализ $преобразования $GenUserSummaryView $Conf $1 (GenUserSummaryView.scala: 27)   в com.dtex.analysis.transform.GenUserSummaryView $Conf $delayedInit $body.apply(GenUserSummaryView.scala: 26)   в scala.Function0 $class.apply $mcV $sp (Function0.scala: 40) at scala.runtime.AbstractFunction0.apply $мкВ $зр (AbstractFunction0.scala: 12)   at org.rogach.scallop.AfterInit $class.delayedInit(AfterInit.scala: 12)   at org.rogach.scallop.ScallopConf.delayedInit(ScallopConf.scala: 26)   в com.dtex.analysis.transform.GenUserSummaryView $Conf (GenUserSummaryView.scala: 26).   в com.dtex.analysis.transform.GenUserSummaryView $.main(GenUserSummaryView.scala: 54)   в com.dtex.analysis.transform.GenUserSummaryView.main(GenUserSummaryView.scala)

4b9b3361

Ответ 1

Проблема в том, что вы использовали несовместимые версии Scala, т.е. Spark был скомпилирован с Scala 2.10, и вы пытались использовать Scala 2.11.

Переместите все на страницу Scala 2.10 и убедитесь, что вы также обновили свой SBT.

Вы также можете попытаться скомпилировать источники искры для Scala 2.11.7 и использовать его вместо этого.

Ответ 2

Я также столкнулся с той же проблемой с spark-submit, в моем случае:

Spark Job был скомпилирован с помощью: Scala 2.10.8

Scala, с которой Spark был скомпилирован в кластере: Scala 2.11.8

Чтобы проверить версию Spark и версию Scala на кластере, используйте команду искровая оболочка.

После компиляции источника Spark Job с Scala 2.11.8 затем отправил задание, и он сработает!!!.