我有以下格式的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
我希望按(Hour, Key)
对Feed进行分组,然后对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
;
你会解释怎么做吗?欣赏它!
答案 0 :(得分: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
;