Масштабируемое решение может состоять в том, чтобы 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 обычно создается в начале карты, после чего его exec () вызывается для каждой записи.Думайте что-то вроде потоковой передачи всех записей через него, как функцию MAX.