首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DataFu BagGroup将在FOREACH范围内对所有袋子进行分组,而不是分组。怎么修?

DataFu BagGroup将在FOREACH范围内对所有袋子进行分组,而不是分组。怎么修?
EN

Stack Overflow用户
提问于 2016-03-15 17:57:26
回答 1查看 150关注 0票数 0

我正在使用DataFu打包我的包。其情况如下:

代码语言:javascript
复制
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记录。例如:

代码语言:javascript
复制
(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),.............})})

转储结果显示包含其他uid数据的袋组。它对所有uid中的整个vid包进行分组,但我希望它只是每个uid。

想法的结果应该是:

代码语言:javascript
复制
(60,{(20160103,255),(20160103,255),(20160103,257),(20160103,255),(20160101,252)},{(20160103,{(20160103,255),(20160103,255),(20160103,257),(20160103,255)}),(20160101,{(20160101,252)})})

有什么帮助吗为什么?我用的是猪1.2.0。

UPdate:

看起来像是内存中的BagGroup类调用操作。因此,第一个uid BagGroup总是正确的,然后它添加袋子一起操作,从之前的处理。即。如果第一个记录是uid 21,那么BagGroup将所有21个结果分组。接下来,如果第二个记录uid 60,那么BagGroup将一起输出21和60结果。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-27 13:23:17

我也有同样的问题。为了解决这个问题,我不得不修改BagGroup UDF (ver.1.2.0)。在groups.clear();方法的开头添加exec解决了这个问题。

代码语言:javascript
复制
@SuppressWarnings("unchecked")
@Override
public DataBag exec(Tuple input) throws IOException {
    fieldNames = (List<String>)getInstanceProperties().get(FIELD_NAMES_PROPERTY);

    DataBag inputBag = (DataBag)input.get(0);   

    groups.clear();

    for (Tuple tuple : inputBag) {
        Tuple key = extractKey(tuple);
        addGroup(key, tuple);
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36018691

复制
相关文章

相似问题

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