带有spark-submit的java.lang.ClassNotFoundException

时间:2019-05-22 08:54:44

标签: scala apache-spark

我安装了spark 2.4.3和sbt 1.2.8。我在Windows 10专业版下。

java -version给出:

java version "1.8.0_211"
Java(TM) SE Runtime Environment (build 1.8.0_211-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode)

我尝试从spark.apache.org执行Quick Start

一切正常,直到我使用sbt。然后,我得到以下异常

  

java.lang.ClassNotFoundException:scala.runtime.LambdaDeserialize

我读了很多关于使用好版本的scala和scala的重要性

我的build.sbt是:

name := "simple-app"
version := "1.0"
scalaVersion := "2.12.8"
libraryDependencies += "org.apache.spark" %% "spark-sql" % "2.4.3"    

我的代码是:

import org.apache.spark.sql.SparkSession

object SimpleApp {
  def main(args: Array[String]) {
    print("Hello !\r\n")
    val logFile = "D:/bin/spark/README.md" // Should be some file on your system
    val spark = SparkSession.builder.appName("Simple Application").getOrCreate()
    val logData = spark.read.textFile(logFile).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")
    spark.stop()
  }
}

如果我发表评论

    //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")

我在控制台中很好地阅读了Hello !

我在main中运行spark-shell的每一行都没有错误。

相应的python脚本已成功提交

我想念什么?

1 个答案:

答案 0 :(得分:0)

最后,这实际上是Spark / Scala版本的兼容性问题

https://spark.apache.org/downloads.html中可以读到:

  

请注意,Spark是使用Scala 2.11 预先构建的,但版本2.4.2除外,   它是使用Scala 2.12预先构建的

我想念的内容是从2.4.2版本的spark 中阅读和理解的。快速入门站旁:

scalaVersion := "2.12.8"

最后,我检查了我的spark安装的jars目录,发现:

scala-compiler-2.11.12.jar
scala-library-2.11.12.jar
...

所以我将built.sbt更改为:

scalaVersion := "2.11.12"

并解决该问题(至少此问题)。