5

Pig でこれを実行しようとしています。(MySQL に相当する group_concat() を探しています)

たとえば、私のテーブルには次のようなものがあります: (3fields- userid, clickcount,pagenumber)

155 | 2 | 12
155 | 3 | 133
155 | 1 | 144
156 | 6 | 1
156 | 7 | 5

望ましい出力は次のとおりです。

155| 2,3,1 | 12,133,144

156| 6,7 | 1,5

PIGでこれを達成するにはどうすればよいですか?

4

1 に答える 1

9
grouped = GROUP table BY userid;
   X = FOREACH grouped GENERATE group as userid, 
                                table.clickcount as clicksbag, 
                                table.pagenumber as pagenumberbag;

今は次のXようになります:

{(155,{(2),(3),(1)},{(12),(133),(144)},
 (156,{(6),(7)},{(1),(5)}}

ここで、組み込みの UDF BagToTupleを使用する必要があります。

output = FOREACH X GENERATE userid, 
                            BagToTuple(clickbag) as clickcounts, 
                            BagToTuple(pagenumberbag) as pagenumbers;

output必要なものが含まれているはずです。出力ステップをマージ ステップにマージすることもできます。

    output = FOREACH grouped GENERATE group as userid, 
                     BagToTuple(table.clickcount) as clickcounts, 
                     BagToTuple(table.pagenumber) as pagenumbers;
于 2013-09-13T08:59:14.543 に答える