治疗技术焦虑的方法就是学习!

[转]hadoop编程实例–数据排序

Java 李新广 673℃ 0评论

        “数据排序“是许多实际任务执行时要完成的第一项工作,比如学生成绩评比数据建立索引等。这个实例和数据去重类似,都是原始数据进行初步处理,为进一步的数据操作打好基础。下面进入这个示例。
      

1.1 实例描述

         对输入文件中数据进行排序。
输入文件中的
每行内容均为一个
数字
即一个数据。要求在
输出中每行有
两个间隔的数字,其中,
第一个代表原始数据在原始数据集中的
位次
第二个代表
原始数据

         样例输入
        1)file1: 


       2)file2:


     
3)file3:


       样例
输出

1.2 设计思路

        这个实例
仅仅要求对
输入数据进行排序,熟悉MapReduce过程的读者会很快想到在MapReduce过程中就有排序,是否可以利用这个
默认的排序,而不需要自己再实现具体的排序呢?答案是肯定的。

  但是在使用之前首先需要了解它的默认排序规则。它是按照key值进行排序的,如果key为封装int的IntWritable类型,那么MapReduce按照数字大小对key排序,如果key为封装为String的Text类型,那么MapReduce按照字典顺序对字符串排序。
  了解了这个细节,我们就知道应该使用封装int的IntWritable型数据结构了。也就是在map中将读入的数据转化成 IntWritable型,然后作为key值输出(value任意)。reduce拿到之后,将输入的 key作为value输出,并根据value-list元素个数决定输出的次数。输出的key(即代码中的linenum)是一个全局变量,它统计当前key的位次。需要注意的是这个程序中没有配置Combiner,也就是在MapReduce过程中不使用Combiner。这主要是因为使用map和reduce就已经能够完成任务了。

1.3 程序代码

    程序代码如下所示:

转载请注明:大道至简 » [转]hadoop编程实例–数据排序

喜欢 (1)or分享 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址