按多个字段分组并输出元组

Roc*_*ock 8 hadoop apache-pig

我有以下格式的Feed:

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
Run Code Online (Sandbox Code Playgroud)

并且我希望将Feed分组(Hour, Key)然后将其加总,Value但保持ID为元组:

({1, K1}, {001, 002}, 5)
({2, K1}, {005}, 4)
({1, K2}, {002}, 1)
({2, K2}, {003, 004}, 11)
Run Code Online (Sandbox Code Playgroud)

我知道如何使用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
;
Run Code Online (Sandbox Code Playgroud)

你会解释怎么做吗?欣赏它!

reo*_*toa 13

你只需要使用行李投影算子..这将创建一个新的包,其中元组只包含您指定的元素.在你的情况下,使用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
;
Run Code Online (Sandbox Code Playgroud)