2017-06-15 110 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上運行。我試圖升級到Spark 2,但我錯過了一些東西。

+0

它看起來像一個包的問題。斯卡拉標準庫缺失。 – Zernike

+0

如何解決這個問題? –

+0

將scala-library-2.11.jar添加到classpath或放入jar中。這取決於您的部署過程。 – Zernike

回答

0

ArrowAssoc類確實存在於您的Scala庫中。請參閱this Scala doc。但是你在Spark庫中出錯。很明顯,您使用的Spark版本與Scala版本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)。」從https://spark.apache.org/docs/latest/ –

+0

@paul您的依賴關係是正確的。運行時環境中的問題。 1)如果你在工作節點上預安裝了庫,那麼我想你需要更新它。 spark-1.6默認使用scala-2.10。 2)如果你部署fat jar,那麼你的包裝是錯誤的(例如sbt-assembly設置)。 – Zernike

0

我發現了這個問題。我的系統上安裝了Scala 2.10.5。所以無論是sbt還是spark-submit都在打電話,期待2.11.11。

0

我有同樣的問題。但是,就我而言,問題在於我在Spark1.x集羣中部署了該jar,因爲代碼是用Spark2.x編寫的。

所以,如果你看到這個錯誤,只需檢查你的代碼中使用的spark & scala的版本和相應的已安裝版本。