知识准备
reducer类的操作对象是分区
,一个分区初始化一次reducer类。reduce()函数的操作对象是组
,一个分区中有几个分组就调用几次reduce()函数。- 分组默认采用通过比较键的方式来实现。当自定义组合键时,往往需要根据组合键中的某一个属性进行分组统计,此时就用到自定义分组类。通过重写其中的compare()方法定义分组规则。
分组前先对合并后的分区文件中的记录进行排序,排序后再进行分组
。分组是通过对排序后的记录从上往下遍历比对进行的。如果上下两个比对结果为0,则分到同一个组,否则各分一个组当分组规则与排序规则不同时
,需要另写一个分组类,并且分组的N个字段必须是排序的前N个字段,且顺序要一致。
下面通过一个实例进行说明:
题目
求每门课程平均分前三名
数据
computer,huangxiaoming,85,86,41,75,93,42,85
computer,xuzheng,54,52,86,91,42
computer,huangbo,85,42,96,38
english,zhaobenshan,54,52,86,91,42,85,75
english,liuyifei,85,41,75,21,85,96,14
algorithm,liuyifei,75,85,62,48,54,96,15
computer,huangjiaju,85,75,86,85,85
english,liuyifei,76,95,86,74,68,74,48
english,huangdatou,48,58,67,86,15,33,85
algorithm,huanglei,76,95,86,74,68,74,48
algorithm,huangjiaju,85,75,86,85,85,74,86
computer,huangdatou,48,58,67,86,15,33,85
english,zhouqi,85,86,41,75,93,42,85,75,55,47,22
english,huangbo,85,42,96,38,55,47,22
algorithm,liutao,85,75,85,99,66
computer,huangzitao,85,86,41,75,93,42,85
math,wangbaoqiang,85,86,41,75,93,42,85
computer,liujialing,85,41,75,21,85,96,14,74,86
computer,liuyifei,