如何计算分组后计数之间的差异?
How to compute the difference between counts after grouping?
我将组中的数据格式化为:(GroupID, count)。像下面这样,我想计算计数之间的差异,同时保留 GroupID。所以,它变成了 (1, 288) (2, 2), (3,66)....
我尝试使用 SUBTRACT 函数,但不确定如何从当前记录中减去上一条记录。第二张图片显示了计数部分。减法部分失败。
这实现起来有点棘手,但可以使用 JOIN.Generate 另一个从第二行开始但 ID 为 1 的关系来完成,即 ($0-1)。加入 2 个关系并生成 difference.For 我加 1 以获得原始 ids.Union 第一行,其中包含差异的行。
A = foreach win_grouped generate [=10=] as id,count() as c; -- (1,228),(2,230)... so on
A1 = filter A by ([=10=] > 1); -- (2,230),(3,296)... so on
B = foreach A1 generate ([=10=] - 1) as id, as c; -- (1,230),(2,296)... so on
AB = join A by id,B by id; -- (1,228,1,230),(2,230,2,296)...so on
C = foreach AB generate (A::id + 1),(B::c - A::c) -- (2,2),(3,66)...so on
D = limit A 1; -- (1,288)
E = UNION D,C; -- (1,288),(2,2),(3,66)...so on
DUMP E;
我将组中的数据格式化为:(GroupID, count)。像下面这样,我想计算计数之间的差异,同时保留 GroupID。所以,它变成了 (1, 288) (2, 2), (3,66).... 我尝试使用 SUBTRACT 函数,但不确定如何从当前记录中减去上一条记录。第二张图片显示了计数部分。减法部分失败。
这实现起来有点棘手,但可以使用 JOIN.Generate 另一个从第二行开始但 ID 为 1 的关系来完成,即 ($0-1)。加入 2 个关系并生成 difference.For 我加 1 以获得原始 ids.Union 第一行,其中包含差异的行。
A = foreach win_grouped generate [=10=] as id,count() as c; -- (1,228),(2,230)... so on
A1 = filter A by ([=10=] > 1); -- (2,230),(3,296)... so on
B = foreach A1 generate ([=10=] - 1) as id, as c; -- (1,230),(2,296)... so on
AB = join A by id,B by id; -- (1,228,1,230),(2,230,2,296)...so on
C = foreach AB generate (A::id + 1),(B::c - A::c) -- (2,2),(3,66)...so on
D = limit A 1; -- (1,288)
E = UNION D,C; -- (1,288),(2,2),(3,66)...so on
DUMP E;