Apache 如何删除Pig中重复的数据行

Apache 如何删除Pig中重复的数据行,apache,dataset,apache-pig,filtering,Apache,Dataset,Apache Pig,Filtering,“YouTube倒带:2017年的形状|#YouTube倒带”137843120 3014479 1602383 817582 “YouTube倒带:2017 |#YouTube倒带的形状”125431369 2912715 1545018 807558 “YouTube倒带:2017 |#YouTube倒带的形状”113876217 2811217 1470387 787174 “YouTube倒带:2017 |#YouTube倒带的形状”100911567 2656678 1353655 6

“YouTube倒带:2017年的形状|#YouTube倒带”137843120 3014479 1602383 817582

“YouTube倒带:2017 |#YouTube倒带的形状”125431369 2912715 1545018 807558

“YouTube倒带:2017 |#YouTube倒带的形状”113876217 2811217 1470387 787174

“YouTube倒带:2017 |#YouTube倒带的形状”100911567 2656678 1353655 682890

《惊奇漫画工作室的复仇者:无限战争官方预告片》89930713 2606665 53011 347982

《惊奇漫画工作室的复仇者:无限战争官方预告片》87450245 2584675 52176 341571

《惊奇漫画工作室的复仇者:无限战争官方预告片》84281319 2555414 51008 339708

《惊奇漫画工作室的复仇者:无限战争官方预告片》80360459 2513103 49170 335920

“YouTube倒带:2017年的形态|#YouTube倒带”75969469 2251826 1127811 827755

《惊奇漫画工作室的复仇者:无限战争官方预告片》74789251 2444960 46172 330710

《惊奇漫画工作室的复仇者:无限战争官方预告片》66637636 2331359 41154 316185

《惊奇漫画工作室的复仇者:无限战争官方预告片》56367282 2157741 34078 303178

“YouTube倒带:2017年的形态|#YouTube倒带”52611731891822 884963 702784

“给我们的女儿”512431490

“给我们的女儿”48635732 0 0

在上面的数据中有两列,一列是“标题”,另一列是视图、喜欢、不喜欢、评论和计数

如何使用筛选和删除重复数据
我想删除具有相同“标题”的数据,并保留具有最高视图的数据

数据具有15列我选择了问题中提到的5列 “选择指定的列”定义了上述要求的表

仅_likes=foreach select_指定的_列生成$0,$1

将“只喜欢”存储到“测试/只喜欢”中

group_likes=仅群组_likes乘以$0

将组_喜欢存储到“测试/组_喜欢”中

max_likes=foreach group_likes生成组,max(仅_likes.views)

将max_likes存储到“test/max_likes”中

结果\u likes=订单最大\u likes$1 DESC

将结果存储到“测试/结果”中


我使用以下命令实现了这一点

如果您想保留与MAX likes对应的记录的所有字段,您必须这样做:

dataAll = LOAD 'path' USING PigStorage('\t') AS (title:chararray, views:long, likes:long, dislikes:long, comment_count:long);

--group the data by title so that all records belonging to a title fall into a bag in the same record
dataGrouped = GROUP dataAll BY title;

--Using a nested foreach, order the contents of the bag by likes and pick the top record
dataDeduped = FOREACH dataGrouped {
                 soredtedByLikes = ORDER dataAll BY likes DESC;
                 maxLikesRecord = LIMIT soredtedByLikes 1;
                 GENERATE FLATTEN(maxLikesRecord);
              }

STORE dataDeduped INTO 'outputPath' USING PigStorage('\t');

嵌套Foreach在这种情况下非常有用。请在此处查看更多信息:(在该链接中搜索嵌套Foreach)。

如果您只想为给定标题保留最大喜欢度,这种方法很好。但是,如果您想为与最大喜欢度对应的记录保留其他字段,请查看我的答案。