pig条件语句

dxpyg8gm  于 2021-05-30  发布在  Hadoop
关注(0)|答案(1)|浏览(255)

我想我已经知道这个问题的答案了,但我只是想在我放弃做一些丑陋的事情之前先看看这里。
我有一个查询,需要计算总点击量,以及总不同的用户。总点击量将仅限于此代码,而不包括:

report              = FOREACH report GENERATE user, genre, title;
report              = DISTINCT report;
report              = GROUP report BY (genre, title);

我的问题本质上是:有没有任何方法可以编写一个条件语句来跳过这个过程中的不同步骤?伪:

report              = FOREACH report GENERATE user, genre, title;
if $report_type == 'users':
    report              = DISTINCT report;
end if
report              = GROUP report BY (genre, title);

我不希望有两个单独的文件,到目前为止,我能找到的唯一解决方案是使用python等 Package 器来动态处理它。我宁愿把每件事都放在一个简单的.pig文件里,但找不到办法。

kwvwclae

kwvwclae1#

一个选择是你可以试试这样的东西。你能核对一下你的意见吗?
输入:

user1,action,aa
user2,comedy,cc
user3,drama,dd
user1,action,aa
user1,action,aa
user2,comedy,cc

Pig手稿:

A = LOAD 'input' USING PigStorage(',') AS (user, genre, title);
B = FOREACH A GENERATE user, genre, title;
C = GROUP B BY (genre, title);
D = FOREACH C {
                noDistValue = FOREACH B GENERATE user,genre,title;
                distValue =  DISTINCT B;
                GENERATE $0 AS grp,noDistValue,distValue;
              }
E = FOREACH D GENERATE grp,(('$report_type' == 'users')?distValue:noDistValue) AS mybag;
DUMP E;

输出1:

pig-x local-param“report\u type=users”test.pig

((action,aa),{(user1,action,aa)})
((comedy,cc),{(user2,comedy,cc)})
((drama,dd),{(user3,drama,dd)})

输出2:

pig-x local-param“report_type=nonusers”test.pig

((action,aa),{(user1,action,aa),(user1,action,aa),(user1,action,aa)})
((comedy,cc),{(user2,comedy,cc),(user2,comedy,cc)})
((drama,dd),{(user3,drama,dd)})

如果要计算计数,则投影关系e,并且可以根据需要修改上述脚本。

相关问题