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 回答