Spark中Scala Seq行的NoSuchMethodError
Posted
技术标签:
【中文标题】Spark中Scala Seq行的NoSuchMethodError【英文标题】:NoSuchMethodError for Scala Seq line in Spark 【发布时间】:2016-02-17 19:28:07 【问题描述】:尝试在 Spark 中运行类似于以下帖子的纯 Scala 代码时出现错误:this 和 this
他们的问题是他们使用了错误的 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$1(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)
【问题讨论】:
你能举个例子吗? Spark 1.6 基于 Scala 2.10 而不是 2.11。您是否专门为 2.11 编译了 Spark?您的第二个链接的公认答案是这个问题 - 为在 Spark(即 2.10)上运行的 2.11 编译的二进制文件。 我刚刚在 Spark 网站上查到了这一点,你是对的——Spark 1.6 仍然基于 2.10。一位同事告诉我,1.6 将 Scala 版本升级到了 2.11,所以这就是我过去几周一直在使用的。我的其他 Spark 工作也运行良好。 【参考方案1】:EMR 上的 Spark 1.6 仍然使用 Scala 2.10 构建,所以是的,您遇到的问题与您链接的帖子中的问题相同。为了在 EMR 上使用 Spark,您目前必须使用 Scala 2.10 编译您的应用程序。
Spark 已将其默认的 Scala 版本从 Spark 2.0 升级到 2.11(将在未来几个月内发布),因此一旦 EMR 支持 Spark 2.0,我们可能会遵循这个新的默认版本并使用 Scala 2.11 编译 Spark。
【讨论】:
是的,我注意到在@Bubbafat 指出之后。一位同事告诉我 1.6 将 Scala 版本升级到了 2.11,但我猜他们误解了他们的源代码并意味着 2.0。以上是关于Spark中Scala Seq行的NoSuchMethodError的主要内容,如果未能解决你的问题,请参考以下文章