如何计算分组后计数之间的差异?

ykejflvf  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(393)

我将组中的数据转换为格式:(groupid,count)。像下面一样,我要计算计数之间的差异,同时保留groupid。所以,它变成(1288)(2,2),(3,66)。。。。我试着使用减法函数,但不知道如何从当前记录中减去上一条记录。第二幅图显示了计数部分。减法部分失败。

nkhmeac6

nkhmeac61#

这有点棘手,但可以使用联接来实现。生成另一个从第二行开始但id为1的关系,即($0-1)。联接这两个关系并生成差异。对于id,添加1以获取原始id。将第一行与包含差异的行合并。

A = foreach win_grouped generate $0 as id,count($1) as c; -- (1,228),(2,230)... so on
A1 = filter A by ($0 > 1);                                -- (2,230),(3,296)... so on
B = foreach A1 generate ($0 - 1) as id,$1 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;

相关问题