NoSuchMethodError for" list.toMap"在火花提交

时间:2015-07-23 21:10:21

标签: apache-spark

当我使用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"

1 个答案:

答案 0 :(得分:0)

sbt package创建一个包含 only 项目的JAR,而不是所有依赖项。

使用spark-submit时,您需要一个包含项目的JAR和所有依赖项 Spark库(已由群集上的Spark安装提供)

可以使用uber-JAR

创建此sbt assembly plugin
  • 在项目文件夹中,使用以下行创建文件project/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