我不明白在生成输出时如何处理重复项,因此我最终得到了多个重复项,但是我只想要一个。
我尝试使用LIMIT,但仅适用于我选择的情况。我还使用了DISTINCT,但我猜错了情况。
grouped = GROUP wantedTails BY tail_number;
smmd = FOREACH grouped GENERATE wantedTails.tail_number as Tails, SUM(wantedTails.distance) AS totaldistance;
因此,对于我的分组,我得到了smg like(不是整个): ({{N983JB),(N983JB),(N983JB),(N983JB),(N983JB),(N983JB),(N983JB),(N983JB),(N983JB),(N983JB),(N983JB),(N983JB), (N983JB),(N983JB),(N983JB),(N983JB),(N983JB),(N983JB)},44550)
但是我希望(N983JB,44550)。如何删除在分组过程中生成的重复项?谢谢!
答案 0 :(得分:0)
我认为,有两种方法可以对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;
如果要在重复数据删除时获得更大的灵活性,可以使用Pig中的嵌套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