分组时如何在包中放入第一个元组

时间:2019-03-30 20:06:46

标签: apache-pig

我不明白在生成输出时如何处理重复项,因此我最终得到了多个重复项,但是我只想要一个。

我尝试使用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)。如何删除在分组过程中生成的重复项?谢谢!

1 个答案:

答案 0 :(得分:0)

我认为,有两种方法可以对Pig中的数据进行重复数据删除。

  1. 不太灵活但方便的方法是将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;
    
  2. 如果要在重复数据删除时获得更大的灵活性,可以使用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