Spark SQL JSON資料處理

來源:互聯網
上載者:User

標籤:

背景 這一篇可以說是“Hive JSON資料處理的一點探索”的兄弟篇。 平台為了加速即席查詢的分析效率,在我們的Hadoop叢集上安裝部署了Spark Server,並且與我們的Hive資料倉儲共用中繼資料。也就是說,我們的使用者即可以通過HiveServer2使用Hive SQL執行MapReduce分析資料,也可以使用SparkServer使用Spark SQL(Hive SQL)執行Spark Application分析資料。 兩者除去MapReduce和Spark Application計算模式的不同之外,Spark Server的優勢在於它的Container進程是常駐的,也就是說它的計算資源是預留的,接收到SQL語句之後可以立即執行,響應速度更加迅速。 既然Spark Server和HiveServer2共用中繼資料,我們應該能夠在SQL層面最大限度地屏蔽兩者之間的差異。雖然Spark官方聲稱相容大多數Hive SQL語句,但實際使用當中卻經常出現各種異常。 本文所要討論的就是Spark SQL使用Hive內建函數json_tuple的異常問題。 我們還是借用“Hive JSON資料處理的一點探索”中的樣本資料表來說明問題。 (1)通過HiveServer2來執行Hive SQL語句;  (2)通過Spark Server來執行Hive SQL語句;  終端異常資訊為:Error: java.lang.ClassNotFoundException: json_tuple (state=,code=0) Spark Server日誌輸出為:  網上也有相關資訊的討論:http://mail-archives.us.apache.org/mod_mbox/spark-user/201504.mbox/%[email protected].com%3E 懷疑的問題為找不到相應的jar包,其實實際問題是UDF解析類名錯誤,json_tuple為函數名稱,其對應的類名應為org.apache.hadoop.hive.ql.udf.generic.GenericUDTFJSONTuple。 這個異常直接影響到我們使用Hive UDF json_tuple通過Spark Server分析JSON資料。 方案 為了達到“Hive JSON資料處理的一點探索”中資料表myjson最後的查詢效果,我們需要使用Hive UDF get_json_object來實現,如下:  由get_tuple和func.json_array結合使用的方案變為get_json_object和func.json_array結合使用的方案。可以看出這種方案雖然繁雜,但可以應對實際問題。  

Spark SQL JSON資料處理

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.