默认情况下,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、华为手机变成黑白屏是怎么调回来 2、手机变黑白怎么调过来 3、手机颜色变成黑白?如何调正常 4、手机变成黑白色怎么调回来,华为? 5、手机屏幕变成黑白色怎么恢复?...
關於大海的詩歌10首讀書啊,我信赖但有朗朗書聲出破廬,遲早有一日有萬鯉躍龍門之奇象。 導語:詩歌是用高度凝練的語言,形象表達作者豐富情绪,集中反映社會生涯並具有一定節奏和韻律的文學體裁。以下是...
夏季气温升高后,湿热环境下,成为婴儿点燃期无事故上火的主要源头。再加上宝宝的身体发育还不完善,调节能力较弱,气候变化也不能及时适应。许多母亲认为孩子上火是很常见的,所以不要太担心,多喝水就好了。然而,...
产品经理工作中,有很多一部分就是沟通了——和运营、设计、开发、老板沟通等。那么在耗费不少时间的沟通中,产品经理能否从中找到一些总结经验以及汲取产品知识的方法,避免重复沟通但是又没学到什么东西。本文中,...
打开软件,导入素材,使用快捷键ctrl+J复制一层,接着点击滤镜,其他,高反差保留,设置半径数值,确定,将图层模式改为叠加,调整透明度,再点击滤镜,锐化,USM锐化,调整各项数值,点击确定即可。 品牌...