*** 找黑客暗语(黑客在 *** 上叫什么)

访客4年前黑客文章920

默认情况下,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、1999中国与美国的黑客大战 2、中美黑客大战是否真有其事? 3、我想知道2001年中美黑客大战的始末 4、2001中美黑客大战谁赢了??? 5、美国黑客 6、...

以玩物得志app为例,做翡翠电商行业竞品分析

以玩物得志app为例,做翡翠电商行业竞品分析

笔者将目光聚焦至翡翠电商行业,以玩物得志app为例,分析它的业务模式与产品结构,并借以改进笔者所负责的同类产品,找到新的产品发力点。 1 调研概述 1.1 调研背景 在2015年时,翡翠电商行业才开...

四川森林大火30名消防员牺牲,想到的影戏《勇往直前》

3月30日17时 ,四川省凉山州木里县境内发生森林火灾,灭火中失联的30名扑火队员的遗体已所有找到,包罗27名森林消防指战员和3名地方扑火职员。 《勇往直前》是美国2017年出品的灾难剧情影戏,凭...

u盘和读卡器有什么区别(读卡器与u盘的区别是什么)

  很多人将读卡器与U盘混为一谈,其实两者有差别。读卡器与u盘的区别是什么?今日就由PChouse为你一一解答。   1、U盘可直接将电脑上的东西存入盘内。读卡器只是一个传输介质,本身不具有储存功能。...