Scala Spark 2.0代码上的运行时错误

时间:2017-06-15 18:25:14

标签: scala apache-spark sbt spark-submit

我有以下代码:

import org.apache.spark.sql.SparkSession
        .
        .
        .
    val spark = SparkSession
      .builder()
      .appName("PTAMachineLearner")
      .getOrCreate()

执行时,我收到以下错误:

Exception in thread "main" java.lang.NoSuchMethodError: scala.Predef$.ArrowAssoc(Ljava/lang/Object;)Ljava/lang/Object;
    at org.apache.spark.sql.SparkSession$Builder.config(SparkSession.scala:750)
    at org.apache.spark.sql.SparkSession$Builder.appName(SparkSession.scala:741)
    at com.acme.pta.accuracy.ml.PTAMachineLearnerModel.getDF(PTAMachineLearnerModel.scala:52)

代码编译和构建就好了。以下是依赖项:

scalaVersion := "2.11.11"
libraryDependencies ++= Seq(
  // Spark dependencies
  "org.apache.spark" %% "spark-hive" % "2.1.1",
  "org.apache.spark" %% "spark-mllib" % "2.1.1",
  // Third-party libraries
  "net.sf.jopt-simple" % "jopt-simple" % "5.0.3",
  "com.amazonaws" % "aws-java-sdk" % "1.3.11",
  "org.apache.logging.log4j" % "log4j-api" % "2.8.2",
  "org.apache.logging.log4j" % "log4j-core" % "2.8.2",
  "org.apache.logging.log4j" %% "log4j-api-scala" % "2.8.2",
  "com.typesafe.play" %% "play-ahc-ws-standalone" % "1.0.0-M9",
  "net.liftweb" % "lift-json_2.11" % "3.0.1"
)

我正在执行这样的代码:

/Users/paulreiners/spark-2.1.1-bin-hadoop2.7/bin/spark-submit \
      --class "com.acme.pta.accuracy.ml.CreateRandomForestRegressionModel" \
      --master local[4] \
      target/scala-2.11/acme-pta-accuracy-ocean.jar \

我把这一切都运行在Spark 1.6上。我试图升级到Spark 2,但我错过了一些东西。

3 个答案:

答案 0 :(得分:0)

ArrowAssoc类确实存在于Scala库中。见this Scala doc。但是你在Spark库中遇到错误。很明显,你使用的Spark版本与Scala ver 2.11不兼容,因为它可能是用较旧的Scala版本编译的。如果您看到this older Scala API doc,则ArrowSpec已经发生了很大变化。例如它现在隐含着许多隐式依赖项。确保您的Spark和Scala版本兼容。

答案 1 :(得分:0)

我发现了问题。我的系统上安装了Scala 2.10.5。所以无论是sbt还是spark-submit都在调用它并期待2.11.11。

答案 2 :(得分:0)

我有同样的问题。但是,就我而言,问题是我在Spark1.x集群中部署了jar,而代码是用Spark2.x编写的。

所以,如果你看到这个错误,只需检查spark&的版本。代码中使用的scala与各自安装的版本相对应。