首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >猪拉丁数在两张表之间的差异

猪拉丁数在两张表之间的差异
EN

Stack Overflow用户
提问于 2017-04-10 13:53:04
回答 2查看 589关注 0票数 0

我有一个表加载了两次,以执行称为“当前”和“以前”的自联接。两者都包含列"key“(不是唯一的)和"value”。我已按键分组,并计算了每组键中的值数。

我想找出与上一个表相比,当前表中添加了多少值,但我得到了一个错误:“无效的标量投影: cur_count :需要从关系中投影列才能用作标量”。我对拉丁语比较陌生,所以我不确定执行这种差异的语法应该是什么。

请忽略cur_count和prev_count的语法。

代码语言:javascript
复制
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;

下面是一些样本数据

代码语言:javascript
复制
key     value
1         12
1         34
1         11
1         45
2          4
3         34
3         34
3         23
4         15
4         19

到目前为止,我的脚本所做的是:它计算每组键中的值数。

代码语言:javascript
复制
key     count
1         4
2         1
3         3
4         2

我想找出一个键和前一个键之间的值的差异。

代码语言:javascript
复制
key     difference 
 2          -3
 3           2
 4          -1  
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-10 15:21:08

cur_count和prev_count是关系,不能以using.You的方式使用,using.You可以通过脚本below.After连接(键-1)实现所需的输出,使用来自关系的列来获得差异。

代码语言:javascript
复制
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 $0,D BY ($0-1);
F = FOREACH E GENERATE $2,$3-$1;
DUMP F;

票数 1
EN

Stack Overflow用户

发布于 2017-04-10 15:28:04

假设您有两组grp1和grp2,它们包含您前面描述的内容

代码语言:javascript
复制
key     count
1         4
2         1
3         3
4         2

注意:我没有执行下面的Pig语句。

代码语言:javascript
复制
-- 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 ($0+1) as rank,key,count

在此之后,两国关系将如下所示。把它们并排排列,以便比较。

代码语言:javascript
复制
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  

按等级加入这两组,产量低于产出

代码语言:javascript
复制
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“语句,该语句可以在上面的两个计数列中找到差异。

代码语言:javascript
复制
result = FOREACH <<joined relation>> GENERATE $1 as key,($2-$5) as difference
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43325119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档