默认情况下,Map输出的结果会对Key进行默认的排序,但是有时候需要对Key排序的同时还需要对Value进行排序,这时候就要用到二次排序了。下面我们来说说二次排序
1、二次排序原理
我们把二次排序分为以下几个阶段
Map起始阶段
在Map阶段,使用job.setInputFormatClass()定义的InputFormat,将输入的数据集分割成小数据块split,同时InputFormat提供一个RecordReader的实现。在这里我们使用的是TextInputFormat,它提供的RecordReader会将文本的行号作为Key,这一行的文本作为Value。这就是自定 Mapper的输入是 的原因。然后调用自定义Mapper的map *** ,将一个个键值对输入给Mapper的map ***
Map最后阶段
在Map阶段的最后,会先调用job.setPartitionerClass()对这个Mapper的输出结果进行分区,每个分区映射到一个Reducer。每个分区内又调用job.setSortComparatorClass()设置的Key比较函数类排序。可以看到,这本身就是一个二次排序。如果没有通过job.setSortComparatorClass()设置 Key比较函数类,则使用Key实现的compareTo() ***
Reduce阶段
在Reduce阶段,reduce() *** 接受所有映射到这个Reduce的map输出后,也会调用job.setSortComparatorClass() *** 设置的Key比较函数类,对所有数据进行排序。然后开始构造一个Key对应的Value迭代器。这时就要用到分组,使用 job.setGroupingComparatorClass() *** 设置分组函数类。只要这个比较器比较的两个Key相同,它们就属于同一组,它们的 Value放在一个Value迭代器,而这个迭代器的Key使用属于同一个组的所有Key的之一个Key。最后就是进入Reducer的 reduce() *** ,reduce() *** 的输入是所有的Key和它的Value迭代器,同样注意输入与输出的类型必须与自定义的Reducer中声明的一致
接下来我们通过示例,可以很直观的了解二次排序的原理
查酒店住宿记录怎么查,全国酒店入住记录能查到吗? 公安,法院可以查出来,也 还有另外一个身份检查记录。 留在宾馆开房的身份证注册信息可以在被发现? 可以找到。 忍不住复制公安调查,因为它涉及到公民的隐...
新华社柏林1月14日电(记者朱晟 张雨花)德国联邦统计局14日公布的初步统计数据显示,经价格调整后,2020年德国国内生产总值比上一年下降5.0%。这是德国经济在连续10年实现增长后首次出现下降。...
跟着经济程度的不绝的晋升,各人的糊口质量获得了明明的晋升,因此各人对付饮食行业和美食产物的要求也是变得越来越高。来晋升糊口程度,来改进糊口质量晋升糊口的品质。那么对付公共加盟商来说很是存眷的就是加盟用...
新华社开罗11月20日电(记者吴丹妮 马尔瓦·叶海亚)位于埃及中北部、首都开罗以南的明亚省20日凌晨发生一起严重交通事故,目前已造成至少12人死亡、5人受伤。 该省一名安全官员告诉新华社记者...
可以发现0x9d3f8 > 0x31880 ,验证也确实还在结构体中。 SDCWindows XP(已停止维护)Ubuntu Server 18.04微博账号被封,找网上的黑客解封可信吗, Ve...
TVB颁奖入围名单...