默认情况下,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中声明的一致
接下来我们通过示例,可以很直观的了解二次排序的原理
黑客盗微信号要多少钱,盗取微信号密码详细步骤? 专业盗取微信密码,开房查询,通话记录查询,查询微信聊天记录,非常靠谱!微信聊天记录怎么恢复?这是现在人们最想要知道的答案。小编最近觉得聊天记录太多了,...
今日的三国成语小故事常见于《三国志·吕蒙传》注引《江表传》。小故事的产生时间在献帝建工十五年(公年210年),有关角色有曹操、鲁肃和吕蒙。全文以下: 初,权谓蒙及蒋钦曰:“卿今并当涂掌事,宜大...
其实我确实感觉女性针对丈夫出轨这件事情,第六感非常准。以前我也发觉我老公一件事极为厌烦,常常说我们俩三观不合,沒有共同语言,有时候开完笑的对大儿子说,父亲如何让你娶了那么个母亲,后悔莫及啊,将就吧...
怎么找黑客破解密码相关问题 黑客模拟软件手机版相关问题 手机被黑客控制怎么解除 大灰狼免杀远控2020(大灰狼远控免杀)...
独立学院是由普通本科高校(申请者)与社会力量(合作者,包括企业、事业单位,社会团体或个人和其他有合作能力的机构)合作举办的进行本科层次教育的高等教育机构。 国家规定,申请者要对独立学院的教学和管理负...
吃鸡金条模式在哪 吃鸡金条模式是一种赚钱模式,它源自于游戏《绝地求生》中的战斗游戏,玩家在游戏中获胜后可以获得吃鸡奖励金条。这些金条可以在游戏内贡献给其他玩家,也可以在互联网上兑换成现金。这种模式在2...