我用datafu把我的包打包成一个包。具体情况如下:
pvlist_grp = GROUP pvlist by uid;
uid_vid_pv = FOREACH pvlist_grp {
vids = FOREACH pvlist GENERATE date, vid;
GENERATE uid,
vids as vid,
BagGroup(pvlist.(date, uid, vid), pvlist.date) as grouped;
}
uid_vid_pv: {uid: chararray,vid: {(date: chararray,vid: chararray)},grouped: {(group: chararray,{(date: chararray,uid: chararray,vid: chararray)})}}
当我转储前10个时,我会看到每个uid包含(date,vid)的所有vid。但是,分组的字段显示其他uid记录。例如:
(60,{(20160103,255),(20160103,255),(20160103,257),(20160103,255),(20160101,252)},{(20160103,{(20160103,21,18),(20160103,21,453),(20160103,21,452),(20160103,21,67),(20160103,21,18),(20160103,21,455),(20160103,21,43),(20160103,21,453),(20160103,21,16),(20160103,21,45),(20160103,21,18),(20160103,21,18),(20160103,21,67),(20160103,21,455),.............})})
转储结果显示baggroup中包含其他uid数据。它将所有uid中的整个vid包分组,但我只需要每个uid。
结果应该是这样的:
(60,{(20160103,255),(20160103,255),(20160103,257),(20160103,255),(20160101,252)},{(20160103,{(20160103,255),(20160103,255),(20160103,257),(20160103,255)}),(20160101,{(20160101,252)})})
有什么帮助吗?为什么?我正在使用pig 1.2.0。
更新:
看起来像是baggroup类的从内存调用操作。因此,第一个uid baggroup始终是正确的,然后它将之前处理过的包添加到一起进行操作。例如,如果第一条记录是uid21,那么baggroup将所有21个结果分组。接下来,如果第二条记录uid为60,则baggroup将同时输出21和60个结果。
1条答案
按热度按时间yhuiod9q1#
我也有同样的问题。为了解决这个问题,我不得不修改
BagGroup UDF (ver.1.2.0)
. 添加groups.clear();
一开始exec
方法解决此问题。