我正在使用 Pig 处理大量数据,我需要按一个字段或另一个字段对记录进行分组。请注意,它不是经典GROUP BY X AND Y
,我的意思是,如果属性X或Y具有相同的值,则必须对两个记录进行分组。
例如,给定此数据集:
1, a, 'r1'
2, b, 'r2'
3, c, 'r3'
4, a, 'r4'
3, d, 'r5'
5, c, 'r6'
5, e, 'r7'
按第一个或第二个字段分组的结果应为:
{(1, a, 'r1'), (4, a, 'r4')}
{(2, b, 'r2')}
{(3, c, 'r3'), (3, d, 'r5'), (5, c, 'r6'), (5, e, 'r7')}
(1)因为'r1'和'r4'对第二个属性具有相同的值。
(2)记录'r2'与第一个或第二个字段没有任何重合。
(3)最后,'r3'用'r5'分享第一个属性的值,用'r6'分享第二个字段的值。并且'r6'与'r7'共享第一个属性的相同值。请注意,'r3'和'r7'没有任何共同的字段,但链接记录它们在同一组中结束。
我使用Java(在Pig之外)解决了这个问题,我知道如何使用Map-Reduce来完成它。但是(为了学习)我想知道如何使用 Pig-latin 或任何可以帮助我解决这些问题的库。