0

我有以下代码:

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,但缺少一些东西。

4

3 回答 3

0

ArrowAssoc 类确实存在于您的 Scala 库中。请参阅此 Scala 文档。但是您在 Spark 库中遇到错误。很明显,您使用的 Spark 版本与 Scala 2.11 版不兼容,因为它可能是用旧的 Scala 版本编译的。如果您看到这个较旧的 Scala API 文档,那么 ArrowSpec 已经发生了很大变化。例如,它现在是隐含的,有很多隐含的依赖项。确保您的 Spark 和 Scala 版本兼容。

于 2017-06-15T18:57:21.813 回答
0

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

于 2017-06-15T20:11:09.010 回答
0

我遇到过同样的问题。但是,就我而言,问题在于我将 jar 部署在 Spark1.x 集群中,因为代码是用 Spark2.x 编写的。

因此,如果您看到此错误,只需对照各自安装的版本检查代码中使用的 spark 和 scala 版本即可。

于 2017-08-24T06:18:11.303 回答