当spark-submit时,ClassNotFoundException scala.runtime.LambdaDeserialize

时间:2017-11-08 05:23:29

标签: scala apache-spark sbt spark-submit

我遵循https://spark.apache.org/docs/2.1.0/quick-start.html

上的Scala教程

我的scala文件

/* SimpleApp.scala */
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf

object SimpleApp {
  def main(args: Array[String]) {
    val logFile = "/data/README.md" // Should be some file on your system
    val conf = new SparkConf().setAppName("Simple Application")
    val sc = new SparkContext(conf)
    val logData = sc.textFile(logFile, 2).cache()
    val numAs = logData.filter(line => line.contains("a")).count()
    val numBs = logData.filter(line => line.contains("b")).count()
    println(s"Lines with a: $numAs, Lines with b: $numBs")
    sc.stop()
  }
}

和build.sbt

name := "Simple Project"

version := "1.0"

scalaVersion := "2.12.4"

libraryDependencies += "org.apache.spark" % "spark-core_2.10" % "2.2.0" 

我成功运行sbt package(已删除除scala源代码和build.sbt之外的所有内容,然后再次运行sbt package

[info] Loading project definition from /home/cpu11453local/workspace/testspark_scala/project
[info] Loading settings from build.sbt ...
[info] Set current project to Simple Project (in build file:/home/my_name/workspace/testspark_scala/)
[info] Packaging /home/my_name/workspace/testspark_scala/target/scala-2.12/simple-project_2.12-1.0.jar ...
[info] Done packaging.
[success] Total time: 1 s, completed Nov 8, 2017 12:15:24 PM

但是,当我运行spark submit

$SPARK_HOME/bin/spark-submit --class "SimpleApp" --master local[4] simple-project_2.12-1.0.jar 

我收到了错误

java.lang.NoClassDefFoundError: scala/runtime/LambdaDeserialize

gist

上的完整火花提交输出

4 个答案:

答案 0 :(得分:2)

正如@Alexey所说,将Scala版本改为2.11修复了问题。

build.sbt

name := "Simple Project"

version := "1.0"

scalaVersion := "2.11.11"

libraryDependencies += "org.apache.spark" % "spark-core_2.11" % "2.2.0" 

请注意,Scala版本必须与Spark匹配。 看看artifactId,spark-core_2.11意味着它与scala 2.11兼容(无向后或向前兼容)

答案 1 :(得分:1)

以下是 Spark/Scala online guide中显示的最新Spark 2.4.1版本示例的build.sbt条目:

name := "SimpleApp" 
version := "1.0"
scalaVersion := "2.12.8"
libraryDependencies += "org.apache.spark"  %% "spark-sql" % "2.4.1"

尽管在IntelliJ IDE中一切正常,但应用程序仍然失败,并出现以下异常,

Caused by: java.lang.NoClassDefFoundError: scala/runtime/LambdaDeserialize

在使用“ sbt软件包”命令创建软件包并按如下所示从命令行运行 spark-submit 之后;

spark-submit -v --class SimpleApp --master local[*] target\scala-2.12\simpleapp_2.12-1.0.jar

答案 2 :(得分:0)

按照https://spark.apache.org/docs/2.4.3/quick-start.html

提供的说明进行操作时,我遇到类似的问题

我的设置详细信息: Spark版本:2.4.3 Scala版本:2.12.8

但是,当我将sbt文件更改为以下配置时,一切正常(编译并运行应用程序jar)

名称:=“简单项目”

版本:=“ 1.0”

scalaVersion:=“ 2.11.11”

libraryDependencies + =“ org.apache.spark” %%“ spark-sql”%“ 2.4.3”

spark 2.4.3似乎仅与2.11.11 Scala版本兼容。在编译示例项目时,sbt已从“ https://repo1.maven.org/maven2/org/scala-lang/scala-library/2.11.11”下载了Scala 2.11库

答案 3 :(得分:0)

对于用于Spark 2.4.3的Scala版本肯定存在一些困惑。 截至今天(2019年11月25日),Spark 2.4.3的文档主页显示:

  

Spark可在Java 8 +,Python 2.7 + / 3.4 +和R 3.1+上运行。对于Scala API,Spark 2.4.3使用Scala 2.12 。您将需要使用兼容的Scala版本(2.12.x)。

     

请注意,自Spark 2.2.0起已删除了对Java 7,Python 2.6和2.6.5之前的旧Hadoop版本的支持。从2.3.0版本开始,不再支持Scala 2.10。从Spark 2.4.1开始不支持Scala 2.11,在Spark 3.0中将删除该支持。

因此,Scala版本应该为 2.12