GroupingComparator 分组(辅助排序)| 学习笔记

简介: 快速学习 GroupingComparator 分组(辅助排序)

开发者学堂课程【Hadoop 分布式计算框架 MapReduce:GroupingComparator分组(辅助排序)】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/94/detail/1533


GroupingComparator 分组(辅助排序)


接下来我们来进入分组排序的学习,它所对应的步骤如下:

对 Reduce 阶段的数据根据某一个或几个字段进行分组。

 

一. 分组排序步骤:

自定义类继承 WritableComparator

(2)重写 compare()方法

@overridew

Public int compare(WritableComparable a,writableComparable b)

{

//比较的业务逻辑

return result;

}

(3)创建一个构造将比较对象的类传给父类.

protected OrderGroupingComparator () {

super(OrderBean.class, true);

}

 

图片24.png

 

三、根据以上,我们再创建一个类名为 OrderGroupingComparator 的类

其中要注意它是继承而并不是实现,

之前我们写的都是实现而并非继承

开始编写时,先自定义继承 WritableComparator,再手动添加包。输入 co, 点击第三个导入 compare 方法之后。

图片25.png

 

定义 aBean为OrderBean 类型,再将 a 强制转换成 OrderBean 类型以方便赋值,再定义 bBean。使用 if..else 语句比较 aBean 和 bBean 的 id 大小,大于返回1,小于返回 -1,相等返回 0,最后令返回值为 result。

但代码到此远远不行,我们还应该写一个构造,并且 super(... , ... ) 其中当前比较是谁 super 的第一个参数就是谁

图片26.png图片27.png

且 super 中为什么传 ture 呢,我们可以鼠标左键点击按住 ctrl 鼠标点击 super 进入查看解码,可以看出,如果为 ture 就创建 newkey( ),而不为 ture 时就会报空指针异常

图片27.png

到此我们分组排序的代码就写完了,而我们通过把该行注释的代码给放回程序中,就可以构造我们所写程序和原来程序的关系

图片28.png

最后再查看效果,和我们所想要的一样,输出了每个 id 的最大值图片29.png

完整代码:

1. package com.atguigu.mr.order;

2. Import org.apache.hadoop.io.writableComparable;

3. import org.apache.hadoop.io.writableComparator;

4. public class OrderGroupingComparator extends writableComparator{

5.    Protected OrderGroupingComparator(){

6.    Super(OrderBean.class,ture);

7. }

8.    @Override

9. public int compare(WritableComparable a,writableComparable b){

10. //要求只要 id 相同,就认为是相同的 key

11.   OrderBean aBean = (orderBean) a;

12.   OrderBean bBean = (orderBean) b;

13.     int result;

14. if (aBean.getOrder_id() > bBean.getOrder_id()){

15.   result = 1;

16. }else if(aBean.getorder_id() < bBean.getOrder_id()){

17.   result = -1;

18. }else {

19.   result = 0;

20. }

21.  Return result;

22. }

相关文章
基于RuoYi实现多条件分组排序列表
基于RuoYi实现多条件分组排序列表
基于RuoYi实现多条件分组排序列表
|
9月前
|
数据处理
利用Stream流将取到的对象List<对象>形式数据进行分组统计转变成Map<分组条件,数量统计>形式
利用Stream流将取到的对象List<对象>形式数据进行分组统计转变成Map<分组条件,数量统计>形式
101 0
|
6月前
|
JavaScript 前端开发 开发者
"震撼揭秘!ElementUI Table组件大变身,一键自定义升序降序按钮,排序操作秒变炫酷舞台,点击即燃,你的列表排序从此不再平凡!"
【8月更文挑战第16天】在Vue.js开发中,ElementUI的Table组件因其实用性和灵活性深受喜爱。本文通过一个后台管理系统用户列表的案例,展示了如何自定义添加“升序”和“降序”按钮以增强排序功能。首先确保安装Vue与ElementUI;接着定义表格数据及初始排序状态;利用scoped slot自定义列模板,加入按钮并绑定点击事件;最后实现在点击按钮时更新排序状态并重新排序数据的逻辑。这种方法不仅改善了用户体验,还为开发者提供了灵活调整排序逻辑的空间。
243 3
|
9月前
使用流排序时Comparator.reverseOrder() 和 reversed()的区别
使用流排序时Comparator.reverseOrder() 和 reversed()的区别
224 0
|
9月前
|
C++ 容器
【C++STL基础入门】list交换、翻转,排序、合并和拼接操作
【C++STL基础入门】list交换、翻转,排序、合并和拼接操作
814 0
|
Java
java8 中List根据某一字段 去重 【延伸介绍另外一种方式】
java8 中List根据某一字段 去重 【延伸介绍另外一种方式】
651 0
java8 中List根据某一字段 去重 【延伸介绍另外一种方式】
|
关系型数据库 MySQL 数据库
MySql基础-笔记6 -排序、分组、连接的使用、NULL值处理
MySql基础-笔记6 -排序、分组、连接的使用、NULL值处理
208 0
MySql基础-笔记6 -排序、分组、连接的使用、NULL值处理
|
存储
LeetCode 79单词搜索&80删除排序数组中的重复项Ⅱ&81.搜索旋转排序数组Ⅱ
单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。
91 0
LeetCode 79单词搜索&80删除排序数组中的重复项Ⅱ&81.搜索旋转排序数组Ⅱ
|
JavaScript vr&ar
列表li排序去重的实现与优化
列表li排序去重的实现与优化
112 0
|
自然语言处理 算法 关系型数据库
常用查询算法(顺序扫描法)|学习笔记
快速学习常用查询算法(顺序扫描法)
321 0

热门文章

最新文章