为什么Scala 2.11和带有扇贝的Spark导致" java.lang.NoSuchMethodError:scala.reflect.api.JavaUniverse.runtimeMirror"?

时间:2015-01-13 05:33:36

标签: scala apache-spark sbt

我正在使用Scala 2.11,Spark和Scallop(https://github.com/scallop/scallop)。我使用sbt来构建一个没有Spark提供依赖项的应用程序胖jar(位于: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 /郎/类加载器;)Lscala /反映/ API / JavaUniverse $ JavaMirror;     在org.rogach.scallop.package $。(package.scala:37)at   org.rogach.scallop.package $。(package.scala)at   com.dtex.analysis.transform.GenUserSummaryView $ Conf.delayedEndpoint $ COM $分特$ $分析变换$ 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 $ MCV $ SP(AbstractFunction0.scala:12)     at org.rogach.scallop.AfterInit $ class.delayedInit(AfterInit.scala:12)     在org.rogach.scallop.ScallopConf.delayedInit(ScallopConf.scala:26)     在   com.dtex.analysis.transform.GenUserSummaryView $配置(GenUserSummaryView.scala:26)。     在   com.dtex.analysis.transform.GenUserSummaryView $。主要(GenUserSummaryView.scala:54)     在   com.dtex.analysis.transform.GenUserSummaryView.main(GenUserSummaryView.scala)

2 个答案:

答案 0 :(得分:15)

问题是您使用了不兼容的Scala版本,即Spark是使用Scala 2.10编译的,并且您尝试使用Scala 2.11。

将所有内容移至Scala 2.10版本,并确保同时更新您的SBT。

您也可以尝试为Scala 2.11.7编译Spark源代码并改为使用它。

答案 1 :(得分:1)

在我的情况下,我也遇到过与spark-submit相同的问题:

Spark Job编译时使用:Scala 2.10.8

在集群上编译Spark的Scala版本:Scala 2.11.8

要检查群集上的Spark版本和Scala版本,请使用" spark-shell "命令。

使用Scala 2.11.8编译Spark作业源后,提交了作业&它工作!!!。