【问题标题】:NoSuchMethodError for "list.toMap" in spark-submitspark-submit 中“list.toMap”的 NoSuchMethodError
【发布时间】:2015-07-23 21:10:21
【问题描述】:

当我使用 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。 但在 spark-shell 或简单的 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"

【问题讨论】:

  • 也许您可以在问题中包含完整的错误消息。
  • 我对我的 spark-1.2.0 &scala 2.10.4 执行了你的代码,它在 spark-submit 上没有任何错误。在 sbt 中尝试 scalaVersion := "2.10.4"。注意:到目前为止,spark-all-versions 都针对 2.10.4,而不是 2.11.x
  • 已更改为 2.10.4 但仍然相同。您是否专门设置了 CLASSPATH?但是“toMap”是scala中一个非常基本的方法,很奇怪,可以通过spark-submit找到它。我在每个节点上测试了这个方法可以正常工作。
  • 我在 Spark 1.3.0 (CDH 5.4.4) 上遇到了同样的问题,但是将 scala 版本设置为 2.10.4 确实为我解决了这个问题。

标签: apache-spark


【解决方案1】:

sbt package 创建一个包含您的项目的 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

【讨论】:

    猜你喜欢
    • 2017-07-12
    • 2017-11-01
    • 1970-01-01
    • 2018-07-14
    • 1970-01-01
    • 2017-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多