2015-09-29 61 views
0

背景Hive UDAF:如何實現每種方法?


我有一個輸入表如下所示:

input_table

我想要做的是排序的weight每個name每個idtype,然後保留前10名和相應的權重,將它們轉換爲字符串並連接它們。 我的輸出表應該是這樣的: output_table


分析


如果我寫一個映射精簡程序,地圖鍵應該idtypenameweight應該是地圖的價值。在reducer中,我可以使用HashMaptype作爲K,nameweight作爲V,然後執行一些排序和字符串連接以實現我的目標。


問題


但現在我需要寫一個UDAF,並用它來與group by id做到這一點。我是UDAF的新手,我想知道每種方法(inititeratemergeterminate)我應該怎麼做? init設置輸出字段嗎?哪個部分應該進行分類?哪部分應該做字符串連接?

+0

嘿安娜貝爾 - 不知道這是否有幫助,但我寫了一個可能有用的UDAF函數指南 - https://blog.matthewrathbone.com/2015/07/27/ultimate-guide-to-writing-自定義功能換hive.html –

回答

0

init方法中,我們可以聲明輸出hashmap。

iterate方法中,我們可以迭代映射的值,並使用關係運算符進行連接和排序。

Terminatepartial用於作業在不同數據節點上分割和運行時使用。

Merge函數在需要合併從所有數據節點計算出的所有結果時被調用。

Terminate函數終止聚合並返回最終結果。