猪 - 创建给定大小的组

问题描述:

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

我需要做类似上面的事情。
因此,如果recs有10条记录,我希望创建组以便每个组每个都有5条记录。猪 - 创建给定大小的组

怎么办?

一个可扩展的解决方案是有一个UDF累积记录到一个新书包和输出包时,它有5个元素和空袋(或空),如果它不具有5个元素呢。

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

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

编辑发表评论:

定期袋属性将是很好的UDF通常instantiated在地图上那么它的exec()被调用每个记录的开始。想想像像MAX函数一样通过它流式传输所有记录。

+0

所以,我将不得不在UDF类中使用一个静态变量?或者还有其他方法吗? – dharm0us 2012-03-09 19:45:29

+0

由于使用非静态属性的UDF的生命周期应该更安全。 – Romain 2012-03-09 21:04:37