3

これは、 Pivo​​t table with Apache Pigの質問に関連しています。入力データは次のとおりです

Id    Name     Value 
1     Column1  Row11 
1     Column2  Row12 
1     Column3  Row13 
2     Column1  Row21 
2     Column2  Row22 
2     Column3  Row23 

ピボットして出力を取得したい

Id    Column1 Column2 Column3 
1      Row11    Row12   Row13 
2      Row21    Row22   Row23 

PlsはPigでそれを行う方法を教えてください.

4

2 に答える 2

2

UDF を使用せずにこれを行う最も簡単な方法は、ID でグループ化し、ネストされた foreach で列名ごとに行を選択し、それらを生成で結合することです。スクリプトを参照してください:

inpt = load '~/rows_to_cols.txt' as (Id : chararray, Name : chararray, Value: chararray);
grp = group inpt by Id;
maps = foreach grp {
    col1 = filter inpt by Name == 'Column1';
    col2 = filter inpt by Name == 'Column2';
    col3 = filter inpt by Name == 'Column3';
    generate flatten(group) as Id, flatten(col1.Value) as Column1, flatten(col2.Value)  as Column2, flatten(col3.Value)  as Column3;
};

出力:

(1,Row11,Row12,Row13)
(2,Row21,Row22,Row23)

もう 1 つのオプションは、列名をキーとして使用して値を取得するよりも、bag{name, value} を map[] に変換する UDF を作成することです (例: vals#'Column1')。

于 2012-07-21T17:25:24.270 に答える