Pig Latin 两个表之间的计数差异
Pig Latin Count difference between two tables
我有一个 table 加载了两次以执行称为当前和上一个的自连接。两者都包含列 "key"(不唯一)和 "value"。我按键分组,并计算每组键中值的数量。
我想知道与之前的 table 相比,当前的 table 增加了多少个值,但我得到了错误 "Invalid scalar projection: cur_count : A column needs to be projected from a relation for it to be used as a scalar"。我对 pig latin 比较陌生,所以我不确定执行这种差异的语法应该是什么。
请忽略 cur_count 和 prev_count 的语法。
cur_count = FOREACH cur_grouped GENERATE COUNT(current);
prev_count = FOREACH prev_grouped GENERATE COUNT(previous);
left_join = join current by key LEFT OUTER, previous by key-1;
difference = FOREACH left_join GENERATE key, cur_count-prev_count; //error here
dump difference;
下面是一些示例数据
key value
1 12
1 34
1 11
1 45
2 4
3 34
3 34
3 23
4 15
4 19
到目前为止我的脚本做了什么:它计算每组键中值的数量
key count
1 4
2 1
3 3
4 2
我想找出一个键和前一个键之间的值数量差异
key difference
2 -3
3 2
4 -1
cur_count 和 prev_count 是关系,不能像你这样使用 using.You 可以使用脚本 below.After 加入关系(关键-1), 使用关系中的列来获得差异。
A = LOAD 'data.txt' USING PigStorage(',') AS (f1:int,f2:int);
B = GROUP A BY f1;
C = FOREACH B GENERATE group,COUNT(A);
D = FOREACH B GENERATE group,COUNT(A);
E = JOIN C BY [=10=],D BY ([=10=]-1);
F = FOREACH E GENERATE ,-;
DUMP F;
假设您有两个组 grp1 和 grp2,其中包含您之前描述的内容
key count
1 4
2 1
3 3
4 2
注:以下Pig语句我没有执行过
-- Generate the Ranks for two relations
grp1 = rank grp1;
grp2 = rank grp2;
-- Increment rank by 1 for each record in grp2
grp2 = foreach grp2 generate ([=11=]+1) as rank,key,count
在这些之后,这两个关系如下所示。将它们并排排列以进行比较。
Group 1 Group 2
Rank key count Rank key count
1 1 4 2 1 4
2 2 1 3 2 1
3 3 3 4 3 3
4 4 2 5 4 2
按RANK加入两组,产量低于产量
Rank key count Rank key count
2 2 1 2 1 4
3 3 3 3 2 1
4 4 2 4 3 3
5 4 2
现在您可以 运行 另一个 "foreach" 语句找出上面两个计数列的差异。
result = FOREACH <<joined relation>> GENERATE as key,(-) as difference
我有一个 table 加载了两次以执行称为当前和上一个的自连接。两者都包含列 "key"(不唯一)和 "value"。我按键分组,并计算每组键中值的数量。
我想知道与之前的 table 相比,当前的 table 增加了多少个值,但我得到了错误 "Invalid scalar projection: cur_count : A column needs to be projected from a relation for it to be used as a scalar"。我对 pig latin 比较陌生,所以我不确定执行这种差异的语法应该是什么。
请忽略 cur_count 和 prev_count 的语法。
cur_count = FOREACH cur_grouped GENERATE COUNT(current);
prev_count = FOREACH prev_grouped GENERATE COUNT(previous);
left_join = join current by key LEFT OUTER, previous by key-1;
difference = FOREACH left_join GENERATE key, cur_count-prev_count; //error here
dump difference;
下面是一些示例数据
key value
1 12
1 34
1 11
1 45
2 4
3 34
3 34
3 23
4 15
4 19
到目前为止我的脚本做了什么:它计算每组键中值的数量
key count
1 4
2 1
3 3
4 2
我想找出一个键和前一个键之间的值数量差异
key difference
2 -3
3 2
4 -1
cur_count 和 prev_count 是关系,不能像你这样使用 using.You 可以使用脚本 below.After 加入关系(关键-1), 使用关系中的列来获得差异。
A = LOAD 'data.txt' USING PigStorage(',') AS (f1:int,f2:int);
B = GROUP A BY f1;
C = FOREACH B GENERATE group,COUNT(A);
D = FOREACH B GENERATE group,COUNT(A);
E = JOIN C BY [=10=],D BY ([=10=]-1);
F = FOREACH E GENERATE ,-;
DUMP F;
假设您有两个组 grp1 和 grp2,其中包含您之前描述的内容
key count
1 4
2 1
3 3
4 2
注:以下Pig语句我没有执行过
-- Generate the Ranks for two relations
grp1 = rank grp1;
grp2 = rank grp2;
-- Increment rank by 1 for each record in grp2
grp2 = foreach grp2 generate ([=11=]+1) as rank,key,count
在这些之后,这两个关系如下所示。将它们并排排列以进行比较。
Group 1 Group 2
Rank key count Rank key count
1 1 4 2 1 4
2 2 1 3 2 1
3 3 3 4 3 3
4 4 2 5 4 2
按RANK加入两组,产量低于产量
Rank key count Rank key count
2 2 1 2 1 4
3 3 3 3 2 1
4 4 2 4 3 3
5 4 2
现在您可以 运行 另一个 "foreach" 语句找出上面两个计数列的差异。
result = FOREACH <<joined relation>> GENERATE as key,(-) as difference