web-dev-qa-db-ja.com

ClassNotFoundExceptionscala.runtime.Lambdaスパーク送信時にDeserialize

Scalaチュートリアル https://spark.Apache.org/docs/2.1.0/quick-start.html

私の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

要点 の完全なスパーク送信出力

9
Haha TTpro

@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と互換性があることを意味します(後方互換性または前方互換性はありません) )

11
Haha TTpro

https://spark.Apache.org/docs/2.4.3/quick-start.html で提供されている手順に従って、同様の問題が発生します

私のセットアップの詳細:Sparkバージョン:2.4.3 Scalaバージョン:2.12.8

ただし、sbtファイルを以下の構成に変更すると、すべてが正常に機能しました(コンパイルとアプリケーションjarの実行の両方)

name:= "シンプルなプロジェクト"

バージョン:= "1.0"

scalaVersion:= "2.11.11"

libraryDependencies + = "org.Apache.spark" %% "spark-sql"% "2.4.3"

spark 2.4.3は2.11.11と互換性がありますScalaバージョンのみ。サンプルプロジェクトのコンパイル中に、sbtはScala 2.11ライブラリから " https://repo1.maven.org/maven2/org/scala-lang/scala-library/2.11.11 "

1
Naveen

ScalaバージョンSpark 2.4.3。本日(2019年11月25日)現在)のドキュメントホームページに関しては、間違いなく混乱があります。 spark 2.4.3状態:

SparkはJava 8 +、Python 2.7 +/3.4+およびR3.1 +で実行されます。Scala APIの場合、 Spark 2.4.3使用Scala 2.12。互換性のあるScalaを使用する必要がありますバージョン(2.12.x)。

Java 7、Python 2.6および2.6.5より前の古いHadoopバージョンのサポートはSpark 2.2から削除されました。 .0。Scala 2.10のサポートは2.3.0で削除されました。Scala 2.11のサポートはSparkで非推奨になりました= 2.4.1であり、Spark 3.0で削除されます。

したがって、Scalaバージョンは2.12であると想定されます。

1
Avinash Ganta

以下は、最新のSpark 2.4.1リリースサンプルに示されている Spark/Scalaオンラインガイド の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 package'コマンドでパッケージを作成し、spark-submitコマンドラインから次のように;

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