2013-04-17 45 views
0

與豬播放行,我的輸入文件是:PIG(Hadoop的) - 具有可變列

1,4,6

1,2,7,9

2,5,1

1,3,5,1

2,6,2,8

每一行中的第一個值是ID;行的其餘部分只是唯一的值(每行可以有不同數量的列)。

我要轉置到上述:

1,2,4,6,7,9,3,5,1

2,5,1,6,2,8

所以基本上GROUP由ID,然後壓平的列的其餘部分,並輸出,作爲每一行。

是PIG即使是正確的做法嗎?我有辦法在M/R中做到這一點,但認爲豬可能是這種事情的理想選擇。

任何線索非常感謝提供

鄧肯

PS我不關心的值的順序。

+0

您應該將其表示爲DataBag(基本上是一個列表),然後您可以對其執行任何操作。 –

回答

1

未經檢驗的,但這裏是我採取的一般方法:獲取包含ID和值的包變量,壓平,這樣你得到只是ID和一個值的行,採取不同的行,然後按ID。這會給你值的袋每個可以轉換爲字符串,如果你想輸出ID。

A = LOAD 'input' USING TextLoader() as line:chararray; 
B = FOREACH A GENERATE STRSPLIT(line,',',2) as (id:chararray,values:chararray) 
C = FOREACH B GENERATE id, FLATTEN(TOBAG(STRSPLIT(values,','))) as value:chararray; 
D = DISTINCT C; -- I'm assuming you actually want distinct values, wasn't clear. 
E = GROUP D by id; 
F = FOREACH E GENERATE group as id, BagToString(D.value) as valueString:chararray;