自定义GroupingComparator求取topN

1129-徐同学

发表文章数:61

热门标签

首页 » 大数据 » 正文

1.GroupingComparator介绍

GroupingComparator是mapreduce当中reduce端的一个功能组件,主要的作用是决定哪些数据作为一组,调用一次reduce的逻辑,默认是每个不同的key,作为多个不同的组,每个组调用一次reduce逻辑,我们可以自定义GroupingComparator实现不同的key作为同一个组,调用一次reduce逻辑。

2.项目需求

有如下订单数据
订单id 商品id 成交金额
Order_0000001 Pdt_01 222.8
Order_0000001 Pdt_05 25.8
Order_0000002 Pdt_03 522.8
Order_0000002 Pdt_04 122.4
Order_0000002 Pdt_05 722.4
Order_0000003 Pdt_01 222.8

现在需要求出每一个订单中成交金额最大的一笔交易。

3.思路分析

3.1分区

相同的订单号发送到同一个reduce里面去,所以这个时候就得将订单号作为k2。

3.2排序

在reduce里面还要对金额进行排序,排序是对k2进行排序。要对谁进行排序就把谁当作k2,所以这个时候就把金额作为k2。

这个时候,就会发现有冲突,一个是把订单号作为k2,目的是分区。一个是把金额作为k2,目的是排序。
要想同时将我们的订单号和金额作为k2,就得把这两个字段封装到javaBean里面去,重写分区规则,按照订单号进行分区,重写排序规则,按照金额进行排序。

3.3分组

合并相同的key,并且将对应的value形成一个集合,去调用一次reduce。
而此时的k2是如下形式,没有一个k2是相等的,不能合并,所以就得重写分组的策略。
Order_0000001 222.8
Order_0000001 25.8

Order_0000002 722.4
Order_0000002 522.8
Order_0000002 122.4

Order_0000003 222.8

重写分组策略,以我们的订单号作为判断依据,订单号相同的,就认为是同一组,key进行合并,value的数据放到同一个集合里面去。形成如下格式。
Order_0000001 [222.8 25.8]
Order_0000002 [722.4 522.8 122.4]
Order_0000003 [222.8]

标签:

拜师教育学员文章:作者:1129-徐同学, 转载或复制请以 超链接形式 并注明出处 拜师资源博客
原文地址:《自定义GroupingComparator求取topN》 发布于2020-08-21

分享到:
赞(0) 打赏

评论 抢沙发

评论前必须登录!

  注册



长按图片转发给朋友

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

Vieu3.3主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录