首页 文章

Apache Spark:java.lang.NoSuchMethodError .rddToPairRDDFunctions

提问于
浏览
7

sbt package 运行得很好,但在 spark-submit 之后我收到错误:

线程“main”中的异常java.lang.NoSuchMethodError:org.apache.spark.SparkContext $ .rddToPairRDDFunctions(Lorg / apache / spark / rdd / RDD; Lscala / reflect / ClassTag; Lscala / reflect / ClassTag; Lscala / math /排序;)Lorg /阿帕奇/火花/ RDD / PairRDDFunctions;在SmokeStack $ .main(SmokeStack.scala:46)位于sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)的sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Iv.:60)太阳的SmokeStack.main(SmokeStack.scala)位于org.apache.spark.deploy.SparkSubmit $ .org $ apache $ spark $ deploy $的java.lang.reflect.Method.invoke(Method.java:498)中的.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)在org.apache.spark.spark.deploy.SparkSubmit $ .submit(SparkSubmit.scala:)org.apache.spark.deploy.SparkSubmit $ .doRunMain $ 1(SparkSubmit.scala:185)的SparkSubmit $$ runMain(SparkSubmit.scala:736) 210)org.apache.spark.deploy.SparkSubmit $ .main(SparkSubmit.scala:124)at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)

这是违规行:

val sigCounts = rowData.map(row => (row("Signature"), 1)).countByKey()

rowData 是RDD Map [String,String] . "Signature"键存在于 Map 中的所有项目中 .

我怀疑这可能是一个构建问题 . 下面是我的sbt文件:

name := "Example1"
version := "0.1"
scalaVersion := "2.11.8"

libraryDependencies += "org.apache.spark" %% "spark-core" % "1.2.0"
scalacOptions ++= Seq("-feature")

我是Scala的新手所以也许进口不正确?我有:

import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import scala.io.Source

3 回答

  • 1

    java.lang.NoSuchMethodError 通常表明编译的代码版本的版本高于运行时使用的库版本 .

    使用Spark,这意味着用于编译的Spark版本与部署的版本(在计算机或集群上)不同 .

    在开发和运行时之间对齐版本应该可以解决此问题 .

  • 0

    我在将简单的oneline json文件读入数据帧并使用.show()方法显示时遇到了同样的问题 . 我会在myDF.show()代码行中得到此错误 .

    对我来说,结果是构建中的spark-sql库版本错误 .

    即我从SBT进入我的外部图书馆,而不是 .

    在build.sbt中添加以下行解决了这个问题

    libraryDependencies += "org.apache.spark" %% "spark-sql" % "2.2.0"
    
  • 13

    如果更新一个spark依赖项的版本,最安全的是将它们全部更新为相同的版本

相关问题