我猜这个问题和这个类似:
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和总和的评级。但我不确定重复的用户名是否会提高效率。
这是正确的方法吗?有什么好办法吗?任何帮助都将不胜感激!
1条答案
按热度按时间p8h8hvxi1#
你能试试这个吗?
输入:
Pig手稿:
输出:
在上述输出中
Pat and John
在公司里没有看过任何电影,所以输出为空