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);

}

 

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

 

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

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

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

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

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

 

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

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

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

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

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

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

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

最后再查看效果,和我们所想要的一样,输出了每个 id 的最大值GroupingComparator 分组(辅助排序)| 学习笔记

完整代码:

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

上一篇:Apache Hive--安装部署-mysql 版安装| 学习笔记


下一篇:Apache Hive--DML--load 装载数据| 学习笔记