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. }

相关文章
|
20天前
|
数据处理
利用Stream流将取到的对象List<对象>形式数据进行分组统计转变成Map<分组条件,数量统计>形式
利用Stream流将取到的对象List<对象>形式数据进行分组统计转变成Map<分组条件,数量统计>形式
28 0
基于RuoYi实现多条件分组排序列表
基于RuoYi实现多条件分组排序列表
基于RuoYi实现多条件分组排序列表
|
20天前
|
Java
boolean自然排序顺序
boolean自然排序顺序
28 0
|
20天前
使用流排序时Comparator.reverseOrder() 和 reversed()的区别
使用流排序时Comparator.reverseOrder() 和 reversed()的区别
47 0
|
20天前
|
C++ 容器
【C++STL基础入门】list交换、翻转,排序、合并和拼接操作
【C++STL基础入门】list交换、翻转,排序、合并和拼接操作
|
7月前
|
人工智能 算法 机器人
List 函数排序操作,用对方法事半功倍!
作为一名程序员,以下这些场景你肯定不陌生, 1.数据分析和处理:在处理大量数据时,需要对数据进行排序以进行进一步的分析和处理。例如,在市场调研中,可能需要按照客户的购买频率对客户列表进行排序,以确定哪些客户最有可能购买产品或服务。 2.报表生成:在生成报表时,往往需要按照特定的顺序对数据进行排列,以便清晰地展示数据。例如,在制定销售报告时,可能需要按照销售额对产品进行排序,以了解哪些产品的销售额最高。 ......
|
10月前
|
Java
Java——将一组数据固定分组,每组n个元素
Java——将一组数据固定分组,每组n个元素
|
Java
java8 中List根据某一字段 去重 【延伸介绍另外一种方式】
java8 中List根据某一字段 去重 【延伸介绍另外一种方式】
476 0
java8 中List根据某一字段 去重 【延伸介绍另外一种方式】
|
关系型数据库 MySQL 数据库
MySql基础-笔记6 -排序、分组、连接的使用、NULL值处理
MySql基础-笔记6 -排序、分组、连接的使用、NULL值处理
170 0
MySql基础-笔记6 -排序、分组、连接的使用、NULL值处理

热门文章

最新文章