2017-06-15 7 views
0

スパーク私は、次のコードを持っている:ランタイムエラーは2.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 \ 

が、私はこのすべてがスパーク1.6で動作していました。私はスパーク2にアップグレードしようとしていますが、何か不足しています。

+0

パッケージに問題があるようです。 Scala std libが見つかりません。 – Zernike

+0

どのように修正するのですか? –

+0

scala-library-2.11.jarをクラスパスに追加するか、jarに入れます。展開プロセスによって異なります。 – Zernike

答えて

0

ArrowAssocクラスは実際にScalaライブラリにあります。 this Scala docを参照してください。しかし、Sparkライブラリでエラーが発生しています。 SpalaのバージョンはScala ver 2.11と互換性がありません。おそらく古いScalaのバージョンでコンパイルされているはずです。 this older Scala API docが表示されている場合、ArrowSpecが大きく変更されています。例えば暗黙の依存関係がたくさんある現在暗黙の状態です。 SparkとScalaのバージョンが互換性があることを確認してください。

+0

少なくともSpark 2.0は、私が必要とするモデルの保存と読み込み機能を備えた最初のバージョンなので、使いたいです。だからScalaのどのバージョンが必要ですか?これはどこで調べられますか? –

+0

私は互換性のあるバージョンを使用しています:「Scala APIの場合、Spark 2.1.1はScala 2.11を使用しています。互換性のあるScalaバージョン(2.11.x)を使用する必要があります。 from https://spark.apache.org/docs/latest/ –

+0

@paulあなたの依存関係は正しいです。実行時環境での問題。 1)ワーカーノードにライブラリがプリインストールされている場合、それを更新する必要があると思います。 spark-1.6はデフォルトでscala-2.10を使用します。 2)ファットジャーを展開すると、パッケージングが間違っています(たとえば、sbtアセンブリの設定など)。 – Zernike

0

問題が見つかりました。私は自分のシステムにScala 2.10.5をインストールしました。だから、sbtかspark-submitのどちらかがそれを呼び、2.11.11を期待していました。

0

私は同じ問題がありました。しかし、私の場合、問題はSpark1.xクラスターにjarファイルをデプロイしたところです。コードはSpark2.xで書かれています。

このエラーが表示された場合は、コードで使用されているspark & scalaのバージョンを、それぞれのインストールされているバージョンと比較して確認してください。