2016-02-24 52 views
0

我有一個數據組,看起來像這樣一組術後:PIG:在袋子中的方法的元組

input = key1|{(a1,b1,c1),(a2,b2,c2)} 
     key2|{(a3,b3,c3),(a4,b4,c4),(a5,b5,c5)} 

我需要遍歷上面以產生這樣的最終輸出:

<KEY>key1</KEY>| 
<VALUES><VALUE><VALUE1>a1</VALUE1>VALUE2>b1</VALUE2>VALUE3>c1</VALUE3></VALUE><VALUE><VALUE1>a2</VALUE1><VALUE2>b2</VALUE2><VALUE3>c2</VALUE3> </VALUE></VALUES> 
<KEY>key2</KEY>| ... 

我曾嘗試使用FLATTEN和CONCAT在下面的方式來實現這一結果:

A = FOREACH input GENERATE key, FLATTEN(input); 
output = FOREACH A GENERATE CONCAT('<KEY>',CONCAT(input.key,'</KEY>')), 
          CONCAT('<VALUE>',''), 
          CONCAT('<VALUE1>',CONCAT(input.col1,'</VALUE1>') 
          ... 

但是,這並沒有給日期望的輸出。相當新的豬,所以不知道這是否可能。

回答

0

如果FLATTEN你的包比你結束了你的袋子有許多新的「行」的許多元素:

key1|(a1,b1,c1) 
key1|(a2,b2,c2) 

如果我正確理解你的問題,你想這樣的:

使用BagToTuple內置函數。

比你會得到

key1|(a1,b1,c1,a2,b2,c2) 

在這之後,你可以用格式化您例如數據UDF