我正在使用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)
答案 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作业源后,提交了作业&它工作!!!。