Scala、spark版本錯亂問題記錄
表現1: Exception in thread "main" java.lang.NoSuchMethodError: scala.Predef$.$conforms()Lscala/Predef$$less
表現2: NoSuchMethodError: scala.Predef$.ArrowAssoc(Ljava/lang/Object;)Ljava/lang/Object
原因:spark版本的Scala和開發用的Scala版本對不上,或者是pom中寫錯Scala版本導致sparkstreaming等依賴jar的Scala版本錯亂。如spark1.4用的Scala2.10.4,如果用Scala2.11.x開發就不行;或者Scala用對了版本但pom寫錯引用了spark-streaming-kafka_2.11-1.4.0.jar或spark-streaming-kafka_2.11-1.6.0.jar,應該是spark-streaming_2.10-1.4.0.jar就會有問題,雖然語法編譯通過。
附:今天發現spark叢集( cdh5.0.0 + spark1.4.0 ) 配的path和spark-env.sh都是Scala2.11.0,但實際spark-shell啟動後顯示是Scala2.10.4!看起來像是用的自帶的Scala2.10.4 。害我開始用Scala2.11導致各種問題。
問題:spark1.4將dataframe存mysql時候欄位順序必須和建表的時候一樣(聯合主鍵以宣告主鍵順序為準),否則會各種:
java.sql.SQLException: Data truncated for column 'uid' at row 1...或者欄位越界溢位問題,spark1.6則不用管data中欄位順序