我不明白在生成输出时如何处理重复项,所以我最终得到了几个副本,但我只想要一个。
我尝试过使用LIMIT,但这只适用于我选择的情况。我也使用了DISTINCT但错误的情况我想。
grouped = GROUP wantedTails BY tail_number;
smmd = FOREACH grouped GENERATE wantedTails.tail_number as Tails, SUM(wantedTails.distance) AS totaldistance;
所以对于我的分组,我得到了smg(不是整体):( {(N983JB),(N983JB),(N983JB),(N983JB),(N983JB),(N983JB),(N983JB),(N983JB),( N983JB),(N983JB),(N983JB),(N983JB),(N983JB),(N983JB),(N983JB),(N983JB),(N983JB),(N983JB)},44550)
但我期待(N983JB,44550)。如何删除分组期间生成的重复项?谢谢!
我看到它的方式,有两种方法可以去除Pig中的数据。
MAX
应用于执行GROUP BY
后需要重复数据删除的列。仅当您要在重复项中添加值时才应用SUM
:
dataWithDuplicates = LOAD '<path_to_data>';
grouped = GROUP dataWithDuplicates BY tail_number;
dedupedData= FOREACH grouped GENERATE
--Since you have grouped on tailNumber, it is already de-duped
group AS tailNumber,
MAX(dataWithDuplicates.distance) AS dedupedDistance,
SUM(dataWithDuplicates.distance) AS totalDistance;
FOREACH
。这个问题抓住了它的用法要点:how to delete the rows of data which is repeating in Pig。嵌套FORACH的其他参考:https://www.safaribooksonline.com/library/view/programming-pig/9781449317881/ch06.html