默认情况下,Map输出的结果会对Key进行默认的排序,但是有时候需要对Key排序的同时还需要对Value进行排序,这时候就要用到二次排序了。下面我们来说说二次排序
1、二次排序原理
我们把二次排序分为以下几个阶段
Map起始阶段
在Map阶段,使用job.setInputFormatClass()定义的InputFormat,将输入的数据集分割成小数据块split,同时InputFormat提供一个RecordReader的实现。在这里我们使用的是TextInputFormat,它提供的RecordReader会将文本的行号作为Key,这一行的文本作为Value。这就是自定 Mapper的输入是<LongWritable,Text> 的原因。然后调用自定义Mapper的map *** ,将一个个<LongWritable,Text>键值对输入给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、女鼠:...
“首先通报一个好消息!”在今天下午举行的北京市新型冠状病毒感染的肺炎疫情防控工作新闻发布会上,北京市卫生健康委新闻发言人高小俊介绍说,经过医护人员精心治疗后,北京市又有3名新型冠状病毒感染的肺炎患者达...
本文目录一览: 1、盘点一下,有哪些著名的黑客入侵案? 2、轰动的网络的黑客案有哪些? 3、历史上最著名的几次黑客事件 4、比较经典的黑客故事有哪些? 5、著名的黑客事件都有哪些 盘...
11月6日,汇聚了多家国内外头部创意设计机构和企业的第七届成都创意设计周正式开幕,洛可可创新设计集团(以下简称“洛可可”)作为受邀企业,携旗下“新物种设计展”,以众多创意产品亮相设计周。 本次洛...
孩子总是很容易发脾气是什么原因,孩子总是发脾气的原因是什么,很多人看到孩子在那边哭那边闹就受不了,那么为什么孩子总是这个样子呢,友谊长存小编就来讲讲吧。 为什么爱闹情绪的宝宝通常独立性欠缺? 闹情...
中新社北京12月21日电 (陈杭)《2019-2020中国数字出版产业年度报告》(下称报告)21日在北京发布。报告称,声音经济正在全球悄然崛起,有声读物、播客等有声内容已成为全球出版传媒业的重要增...