9

次の形式のフィードがあります。

Hour Key  ID  Value
   1  K1 001      3
   1  K1 002      2
   2  K1 005      4
   1  K2 002      1
   2  K2 003      5
   2  K2 004      6

そして、フィードをグループ化して(Hour, Key)合計したいが、タプルとしてValue保持したい:ID

({1, K1}, {001, 002}, 5)
({2, K1}, {005}, 4)
({1, K2}, {002}, 1)
({2, K2}, {003, 004}, 11)

FLATTENの合計を生成する方法は知っていますが、タプルとしてValue出力する方法がわかりません。IDこれは私がこれまでに持っているものです:

A = LOAD 'data' AS (Hour:chararray, Key:chararray, ID:chararray, Value:int);
B = GROUP A BY (Hour, Key);
C = FOREACH B GENERATE
    FLATTEN(group) AS (Hour, Key),
    SUM(A.Value) AS Value
;

これを行う方法を説明しますか?感謝します!

4

1 に答える 1

14

バッグ射影演算子 を使用するだけです.。これにより、タプルに指定した要素だけが含まれる新しいバッグが作成されます。あなたの場合、使用しますA.ID。実際、すでにこの演算子を使用して入力を提供しています。sum への入力は、フィールドSUMを射影して作成する単一要素のタプルのバッグです。Value

A = LOAD 'data' AS (Hour:chararray, Key:chararray, ID:chararray, Value:int);
B = GROUP A BY (Hour, Key);
C = FOREACH B GENERATE
    FLATTEN(group) AS (Hour, Key),
    A.ID,
    SUM(A.Value) AS Value
;
于 2013-06-19T15:40:40.010 に答える