2016-02-17 79 views
0

我試圖運行星火純Scala代碼類似,這些職位時有錯誤斯卡拉SEQ行:thisthis的NoSuchMethodError在星火

他們的問題是,他們使用的是錯誤的Scala版本編譯的Spark項目。不過,我的是正確的版本。

我在AWS EMR集羣上安裝了Spark 1.6.0以運行該程序。該項目在我的本地機器上編譯,安裝了Scala 2.11,2.11列出了所有依賴項和構建文件,沒有提及2.10。

這是引發錯誤的確切行:

var fieldsSeq: Seq[StructField] = Seq() 

這是確切的錯誤:

Exception in thread "main" java.lang.NoSuchMethodError: scala.runtime.ObjectRef.create(Ljava/lang/Object;)Lscala/runtime/ObjectRef; 
at com.myproject.MyJob$.main(MyJob.scala:39) 
at com.myproject.MyJob.main(MyJob.scala) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:497) 
at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:731) 
at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:181) 
at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:206) 
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:121) 
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala) 
+0

你能舉個例子嗎? –

+3

Spark 1.6基於Scala 2.10而不是2.11。你是否專門爲2.11編譯了Spark?第二個鏈接的接受答案是這個問題 - 二進制編譯爲2.11在Spark上運行(2.10)。 –

+0

我剛剛在Spark網站上看過,你說的對--Spark 1.6仍然基於2.10。一位同事告訴我,1.6將Scala版本提高到了2.11,這就是我過去幾周所使用的。我的其他Spark工作也工作得很好。 – mcmcmc

回答

0

星火1.6電子病歷仍與斯卡拉2.10,建所以是的,你與您鏈接的帖子有相同的問題。爲了在EMR上使用Spark,您目前必須使用Scala 2.10來編譯您的應用程序。

Spark從Spark 2.0(將在未來幾個月內發佈)將其默認Scala版本升級到2.11,因此一旦EMR支持Spark 2.0,我們可能會遵循這一新的默認值並使用Scala 2.11編譯Spark。

+0

是的,我注意到@Bubbafat指出了它。一位同事告訴我,1.6將Scala版本提高到了2.11,但我猜他們誤解了他們的來源,意思是2.0。 – mcmcmc