猪 - 创建给定大小的组

时间:2012-03-08 08:47:15

标签: group-by apache-pig

recs = load 'a.txt';
grp = group recs with each group having 5 records;

我需要像上面那样做。
因此,如果recs有10条记录,我希望创建组以便这样做 每组有5个记录。

怎么做?

1 个答案:

答案 0 :(得分:0)

可扩展的解决方案可能是将 UDF累积记录放入新的包中,当输出包含5个元素时输出,如果包含空包,则输出还没有5个元素。

一个缺点是每个地图的最后一组可能少于5个元素(因此可以尝试使用空值填充或丢弃/重新组合它们。)

recs = load 'a.txt';
grp_5 = foreach recs generate GROUPER(*, 5) as group;
grp = filter grp by not IsEmpty(group);

编辑评论:

常规的Bag属性会很好,因为UDF通常在地图的开头instantiated,然后为每条记录调用exec()。想想像通过MAX功能一样流式传输所有记录。