2014-02-14 60 views
0

我第一次使用豬。我已經得到了我哪裏有正是我想要的答案了點,但在一個古怪的嵌套格式:在豬中合併多個圖譜

{(price,49),(manages,"1d74426f-2b0a-4777-ac1b-042268cab09c")} 

我想輸出是一個單一的地圖,沒有任何包裝:

[price#49, manages#"1d74426f-2b0a-4777-ac1b-042268cab09c"] 

我設法使用TOMAP得到這個,但我無法弄清楚如何合併和扁平化它。

{([price_specification#{"amount":49,"currency":"USD"}]),([manages#"newest-nodes/1d74426f-2b0a-4777-ac1b-042268cab09c"])} 

我應該怎麼做?

回答

1

不幸的是,沒有內置函數可以爲你做到這一點。你必須編寫你自己的UDF。幸運的是,這很簡單。

exec方法只想去是這樣的:

public Map<String, Object> exec(Tuple input) { 
    Map<String, Object> m = new HashMap<String, Object>(); 
    for (int i = 0; i < input.size(); i++) 
     m.putAll((Map<String, Object>) input.get(i)); 

    return m; 
} 

的UDF可以採取任何數量的地圖作爲參數。

請注意,如果兩個或更多的地圖共享一個密鑰,那麼遇到的最後一個將是保留的並且其他人將被覆蓋。

+0

謝謝,我結束了許多谷歌搜索之後,發現http://stackoverflow.com/questions/17847970/transform-b​​ag-of-key-value-tuples-to-map-in-apache-pig。它使用UDF(儘管它使用python作爲語言)提出了相同的答案。那個答案最終確實爲我工作。 – cschneid