sbt package
运行得很好,但是在spark-submit
之后出现错误:
线程“主”中的异常java.lang.NoSuchMethodError:
org.apache.spark.SparkContext $ .rddToPairRDDFunctions(Lorg / apache / spark / rdd / RDD; Lscala / reflect / ClassTag; Lscala / reflect / ClassTag; Lscala / math / Ordering;)Lorg / apache / spark / rdd / PairRDDFunctions;
在SmokeStack $ .main(SmokeStack.scala:46)在
SmokeStack.main(SmokeStack.scala)位于
sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)位于
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
在java.lang.reflect.Method.invoke(Method.java:498)在
org.apache.spark.deploy.SparkSubmit $ .org $ apache $ spark $ deploy $ SparkSubmit $$ runMain(SparkSubmit.scala:736)
在
org.apache.spark.deploy.SparkSubmit $ .doRunMain $ 1(SparkSubmit.scala:185)
在org.apache.spark.deploy.SparkSubmit $ .submit(SparkSubmit.scala:210)
在org.apache.spark.deploy.SparkSubmit $ .main(SparkSubmit.scala:124)
在org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
这是违规行:
val sigCounts = rowData.map(row => (row("Signature"), 1)).countByKey()
rowData
是RDD Map [String,String]。地图中的所有项目中都存在“签名”键。我怀疑这可能是构建问题。以下是我的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
最佳答案
java.lang.NoSuchMethodError
通常表明,编译代码所依据的版本比运行时使用的库更高。
使用Spark,这意味着用于编译的Spark版本与(在计算机或群集上)部署的Spark版本不同。
在开发和运行时之间调整版本应该可以解决此问题。