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:({(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
Pig。这个问题抓住了它的使用要点:如何删除在 Pig 中重复的数据行。嵌套 FORACH 的其他参考:https ://www.safaribooksonline.com/library/view/programming-pig/9781449317881/ch06.html
推荐阅读
- javascript - iframe 未在按钮单击时加载
- php - 如何使用外键自定义 Auth::user() 列?拉拉维尔
- assembly - 使用十六进制在汇编代码中编写指令
- javascript - 悬停时的下拉菜单
- maven - 在不创建插件的情况下构建自定义 Maven 生命周期
- java - SAX Parser 是否将所有数据保存在内存中?
- cmake - 更改为 CMake - 一个源,48 个 DLL
- javascript - 打印出数组中的所有重复项 - Javascript - 还需要函数的时间/空间复杂度
- android - 与 io.grpc:grpc-auth:1.13.1 相关的 Google Cloud Android Firestore 依赖项失败
- python - 如何使用工作或学校帐户将 SharePoint Online (Office365) Excel 文件读入 Python,特别是 pandas?