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

问题描述 投票:0回答:1

我不明白在生成输出时如何处理重复项,所以我最终得到了几个副本,但我只想要一个。

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

apache-pig
1个回答
0
投票

我看到它的方式,有两种方法可以去除Pig中的数据。

  1. 不太灵活但方便的方法是将MAX应用于执行GROUP BY后需要重复数据删除的列。仅当您要在重复项中添加值时才应用SUMdataWithDuplicates = 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
© www.soinside.com 2019 - 2024. All rights reserved.