当我使用spark-submit运行以下简单的Spark程序时:
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
import org.apache.spark.rdd.RDD
import org.apache.spark.SparkContext
import org.apache.spark._
import SparkContext._
object TEST2{
def main(args:Array[String])
{
val conf = new SparkConf().setAppName("TEST")
val sc=new SparkContext(conf)
val list=List(("aa",1),("bb",2),("cc",3))
val maps=list.toMap
}
}
我得到了" val maps = list.toMap"的行的java.lang.NoSuchMethodError。 但是在火花壳或简单的scala中,它没有问题:
scala> val list=List(("aa",1),("bb",2),("cc",3))
list: List[(String, Int)] = List((aa,1), (bb,2), (cc,3))
scala> val maps=list.toMap
maps: scala.collection.immutable.Map[String,Int] = Map(aa -> 1, bb -> 2, cc -> 3)
所以要使用" toMap"方法,我在spark-submit中缺少什么?我使用" sbt package"编译程序,没有问题。谢谢!
P.S:build.sbt文件如下:
name := "TEST2"
version := "1.0"
scalaVersion := "2.11.6"
答案 0 :(得分:0)
sbt package
创建一个包含 only 项目的JAR,而不是所有依赖项。
使用spark-submit
时,您需要一个包含项目的JAR和所有依赖项除 Spark库(已由群集上的Spark安装提供)
可以使用uber-JAR:
创建此sbt assembly pluginproject/assembly.sbt
: addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.0")
在build.sbt
中,Spark依赖项应标记为“已提供”:
libraryDependencies ++= Seq(
...
"org.apache.spark" %% "spark-core" % sparkVersion % "provided"
...
)
运行sbt assembly
,这将创建超级JAR target/scala-2.11/TEST2-1.0.jar