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

访客4年前黑客文章909

默认情况下,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中声明的一致

接下来我们通过示例,可以很直观的了解二次排序的原理

相关文章

黑客教你3分钟盗微信号 黑客教你3分钟盗微信号软件教程

黑客教你3分钟盗微信号 当两个人相处融洽时,要理解一个人并不容易,微信已经成为人们日常交流的最大平台。我们经常看到在微信上聊天的人在手机上被欺骗。不久前,贵州的一个男孩和一个非常了解他的女孩约会,开...

本科是什么意思?毕业这么多年我终于懂了

本科是什么意思?毕业这么多年我终于懂了

大学的学制,大致分为:本科、专科,其实还有很多人并不熟悉的“预科”。那到底这些都代表什么意义?大学“本科”的“本”到底是什么意思?又是怎样由来的呢? 大学“本科”究竟是什么意思呢? 这还得从中...

黑客帝国这是我的选择(黑客黑客帝国之类的我)

黑客帝国这是我的选择(黑客黑客帝国之类的我)

本文导读目录: 1、黑客帝国什么意思? 2、假如你是《黑客帝国》里的尼欧,你会选择什么颜色的药丸,红还是蓝,为什么? 3、堪称是科幻电影史上里程碑式巨作,《黑客帝国》为何能获得如此称赞?...

一年中什么时候最冷(一年当中什么时间段温度

一年中什么时候最冷(一年当中什么时间段温度

农村有句老话“三九四九冰上走”为什么这么说呢?主要还是因为老祖宗认为一年中最冷的时候就是这段时间。那这个是怎么算的呢!我们一起来看看! 三九指的是冬至后的第3个9天,也就是冬至后的第19天到27天,...

ps的蒙版工具有什么用,ps文字蒙版工具怎么用

利用蒙版及调色工具快速设计给美女换脸,简单粗暴,后期调色好大小及颜色即可,有兴趣的可以自己试试...

性格内向的人混得最差(性格内向到底有多可怕)

  先做一个检测,给你下列病症吗?一共八篇。   第一,听见电话声响,第一反应是焦虑不安和心烦。当我们想起有电話要打,有些人必须联络的情况下,我也提早好长时间刚开始觉得发慌。第二:在一切正常的社交媒...