2015-11-10 91 views
0

將CSV字符串多列使用:阿帕奇鑽在Apache中鑽

我試圖把下面的數據更加結構化的形式:

"apple","juice", "box:12,shipment_id:143,pallet:B12" 
"mango", "pulp", "box:7,shipment_id:133,pallet:B19,route:11" 
"grape", "jam", "box:10" 

所需的輸出:

fruit, product, box_id, shipment_id, pallet_id, route_id 
apple,juice, 12, 143, B12, null 
mango, pulp, 7, 133, B19, 11 
grape, jam, 10, null, null, null 

數據集運行到幾個GB中。 Drill將輸入讀入三列,最後一個字符串放在一列中。通過對最後一列執行字符串操作操作(REGEXP_REPLACE和CONCAT),然後將該列讀作json(CONVERT_FROM),並最終使用KVGEN和FLATTEN分離到不同的列,成功實現了期望的輸出。

由於正則表達式函數的執行時間相當長。有更好的方法嗎?

(PS:將執行時間與使用pyspark作業來實現所需輸出進行比較)。

回答

0

我沒有看到任何其他的方式來做到這100%與Apache鑽,沒有任何中間存儲

你可以試試用Java編寫的自定義功能,使之更容易編寫。

既然你已經做的工作​​, 你試圖將數據保存在一個文件實木複合地板? CTAS命令:http://drill.apache.org/docs/create-table-as-ctas-command/

這會使後續查詢快很多。