Spark 中 Scala Seq 行的 NoSuchMethodError

NoSuchMethodError for Scala Seq line in Spark

我尝试在 Spark 中 运行 纯 Scala 代码时遇到错误,类似于这些帖子: and

他们的问题是他们使用了错误的 Scala 版本来编译他们的 Spark 项目。但是,我的是正确的版本。

我在 AWS EMR 集群上安装了 Spark 1.6.0 以 运行 程序。该项目是在我的本地机器上编译的,安装了 Scala 2.11,所有依赖项和构建文件中都列出了 2.11,没有任何对 2.10 的引用。

这是引发错误的确切行:

var fieldsSeq: Seq[StructField] = Seq()

准确的错误是:

Exception in thread "main" java.lang.NoSuchMethodError: scala.runtime.ObjectRef.create(Ljava/lang/Object;)Lscala/runtime/ObjectRef;
at com.myproject.MyJob$.main(MyJob.scala:39)
at com.myproject.MyJob.main(MyJob.scala)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:731)
at org.apache.spark.deploy.SparkSubmit$.doRunMain(SparkSubmit.scala:181)
at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:206)
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:121)
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)

EMR 上的 Spark 1.6 仍然使用 Scala 2.10 构建,所以是的,您遇到的问题与您链接的帖子中的问题相同。为了在 EMR 上使用 Spark,您目前必须使用 Scala 2.10 编译您的应用程序。

Spark 已经从 Spark 2.0(将在未来几个月内发布)开始将其默认的 Scala 版本升级到 2.11,因此一旦 EMR 支持 Spark 2.0,我们可能会遵循这个新的默认版本并使用 Scala 2.11 编译 Spark。