2016-06-10 94 views
0

使用的Avro時,我不斷收到NoClassDefFoundError的火花外殼

java.lang.NoClassDefFoundError: org/apache/avro/mapred/AvroWrapper

一個數據幀對象上調用show()時。我試圖通過外殼(火花外殼 - 主絲)做到這一點。我可以看到shell在創建DataFrame對象時識別模式,但是如果我對數據執行任何操作,嘗試實例化AvroWrapper時總會拋出NoClassDefFoundError。我試過在羣集的$HDFS_USER/lib目錄中添加avro-mapred-1.8.0.jar,甚至在啓動shell時使用--jar選項將其包含在內。這些選項都不起作用。任何建議將不勝感激。下面是示例代碼:

scala> import org.apache.spark.sql._ 
scala> import com.databricks.spark.avro._ 
scala> val sqc = new SQLContext(sc) 
scala> val df = sqc.read.avro("my_avro_file") // recognizes the schema and creates the DataFrame object 
scala> df.show // this is where I get NoClassDefFoundError 

回答

0

如果有人遇到這個問題,我終於解決了。我刪除了CDH火花包,並從http://spark.apache.org/downloads.html下載它。之後,一切正常。不確定CDH版本的問題是什麼,但我不會浪費時間去解決問題。

1

數據幀對象本身在val df =...線被創建,但數據尚未讀出。當您詢問某種輸出時(如df.count()df.show()),Spark僅開始讀取和處理數據。

所以最初的問題是avro-mapred軟件包丟失。 嘗試啓動您星火殼牌這樣的:

spark-shell --packages org.apache.avro:avro-mapred:1.7.7,com.databricks:spark-avro_2.10:2.0.1 星火包裝的Avro作爲標誌提供的Avro公司Mapred包,但它不是你的系統(或類路徑)一個或其他原因上。

+0

它似乎只是坐在那裏。將不會超越。 'org.apache.avro#avro-mapred添加爲依賴關係' 'com.databricks#spark-avro_2.10添加爲依賴關係' ':: resolving dependencies :: org.apache.spark#spark-submit -parent; 1.0' \t'confs:[default]' – Pudge

+0

這很奇怪。你能粘貼你用來啓動spark-shell的整個命令嗎? –

+0

對延遲響應抱歉我不得不將任務切換幾天。這裏是我正在運行的命令'spark-shell --master yarn --packages org.apache.avro:avro-mapred:1.7.7,com.databricks:spark-avro_2.10:2.0.1'。此外,不知道它是否有所作爲,但我們正在運行CDH 5.6。再次感謝。 – Pudge

相關問題