pig在维护其他字段的同时对用户进行分组

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

我猜这个问题和这个类似:
pig中分组后字段的选择
但我的问题是,以下是我编造的样本数据:
用户名、电影名、公司、评级
吉姆,大白鲨,a,4
吉姆,棒球,b,4
马特,光环,a,5
马特,棒球,b,4
马特,《椅子史》,b,3.5
帕特,椅子的历史,b,3
约翰,椅子史,b,2
弗兰克,战斗坦克,a,3
弗兰克,椅子的历史,b,5
如何将用户看过的所有电影组合在一起,而不丢失其他信息,如公司和评级。
我想添加一个用户从电影公司a和电影公司b给出的所有评分的交叉。
吉姆,大白鲨,棒球,8岁
马特,光环,棒球,9
弗兰克,战斗坦克,椅子的历史,8
输出格式如下:
用户,公司A,公司B,评级
我从一堆开始,接着是一堆

r1 = LOAD 'data.csv' USING PigStorage(',') as (user_name:chararray, movie_name:chararray, company_name:chararray, rating:int);
r2 = group r1 by user_name;             
r3 = foreach r2 generate group as user_name, flatten(r1);
r4A = filter r3 by company_name == 'A';
r4B = filter r3 by company_name == 'B';

但我有点像
(弗兰克,弗兰克,战斗坦克,a,3)
然后我计划做一个交叉的r4a和r4b和总和的评级。但我不确定重复的用户名是否会提高效率。
这是正确的方法吗?有什么好办法吗?任何帮助都将不胜感激!

p8h8hvxi

p8h8hvxi1#

你能试试这个吗?
输入:

Jim,Jaws,A,4
Jim,Baseball,B,4
Matt,Halo,A,5
Matt,Baseball,B,4
Matt,History of Chairs,B,3.5
Pat,History of Chairs,B,3
John,History of Chairs,B,2
Frank,Battle Tanks,A,3
Frank,History of Chairs,B,5

Pig手稿:

A = LOAD 'input' USING PigStorage(',') AS (user_name:chararray, movie_name:chararray, company:chararray, rating:float);
B = GROUP A BY user_name;
C = FOREACH B {
                filterCompanyA = FILTER A BY company=='A';
                sumA = SUM(filterCompanyA.rating);

                filterCompanyB = FILTER A BY company=='B';
                sumB = SUM(filterCompanyB.rating);

                GENERATE group AS user,
                         FLATTEN(REPLACE(BagToString(filterCompanyA.movie_name),'_',',')) AS companyA,
                         FLATTEN(REPLACE(BagToString(filterCompanyB.movie_name),'_',',')) AS companyB,
                         (((sumA is null)?0:sumA)+((sumB is null)?0:sumB)) AS Rating;
              }

D = FOREACH C GENERATE user,companyA,companyB,Rating;
DUMP D;

输出:

(Jim,Jaws,Baseball,8.0)
(Pat,,History of Chairs,3.0)
(John,,History of Chairs,2.0)
(Matt,Halo,Baseball,History of Chairs,12.5)
(Frank,Battle Tanks,History of Chairs,8.0)

在上述输出中 Pat and John 在公司里没有看过任何电影,所以输出为空

相关问题