【问题标题】:Why do Scala 2.11 and Spark with scallop lead to "java.lang.NoSuchMethodError: scala.reflect.api.JavaUniverse.runtimeMirror"?为什么 Scala 2.11 和带有扇贝的 Spark 会导致“java.lang.NoSuchMethodError: scala.reflect.api.JavaUniverse.runtimeMirror”?
【发布时间】:2015-03-11 00:22:15
【问题描述】:

我正在使用 Scala 2.11、Spark 和 Scallop (https://github.com/scallop/scallop)。我使用 sbt 构建了一个没有 Spark 提供依赖项的应用程序 fat 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

我收到以下错误消息:

线程“主”java.lang.NoSuchMethodError 中的异常: scala.reflect.api.JavaUniverse.runtimeMirror(Ljava/lang/ClassLoader;)Lscala/reflect/api/JavaUniverse$JavaMirror; 在 org.rogach.scallop.package$.(package.scala:37) 在 org.rogach.scallop.package$.(package.scala) 在 com.dtex.analysis.transform.GenUserSummaryView$Conf.delayedEndpoint$com$dtex$analysis$transform$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) 在 scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12) 在 org.rogach.scallop.AfterInit$class.delayedInit(AfterInit.scala:12) 在 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)

【问题讨论】:

  • 看起来你的类路径缺少 scala-reflect.jar

标签: scala apache-spark sbt


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    Spark Job 是用 Scala 2.10.8 编译的

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

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

    在使用 Scala 2.11.8 编译 Spark 作业源之后,然后提交作业并且它工作了!!!。

    【讨论】:

      猜你喜欢
      • 2017-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-25
      • 2018-04-23
      • 2012-06-06
      • 1970-01-01
      • 2017-10-10
      相关资源
      最近更新 更多