自定义排序和分组编程

1.Mapreduce的排序和分组的过程详解:

排序过程:在map和reduce阶段进行排序时,比较的是k2。v2是不参与排序比较的。如果要想让v2也进行排序,需要把k2和v2组装成新的类,作为k2,才能参与比较。

分组过程:分组时也是按照k2进行比较的。

2. 排序和分组案例:

(1)需求讲解:

将一下两排数字进行排序:

5 3

5 2

4 1

2 2

1 1

排序的规则是:

1)先按第一列从小到大排序,

2)如果第一列相同,按第二列从小到大排序

(2)以上需求的解决方案是:

因为hadoop默认的排序方式,只能比较key,也就是第一列,而value是无法参与排序的。因此我们采用的解决方案是自定义排序规则。具体来讲即:

1)自定义数据类型,将原来的key和value进行封装

2)将封装的数据类型当做key,同时调用封装的key的对比方法。

3. 排序和分组案例的编码步骤:

第一步:自定义数据类型:DoubleData。对原始的key,value进行封装

第二步:编写mapper类,调用封装的数据类型的对比方法

第三步:编写reduce类,将排序后的数据输出

第四步:编写main方法执行该mapreduce方法

第五步:执行该mapreduce程序,具体步骤如下:

1)编译并打成jar包

2)上传到hadoop所在机器文件夹下。比如:放在hadoop的根目录的code文件夹下。(code是自己创建的)

3)在hadoop上创建输入文件夹和文件,

创建文件夹:/user/root/input. 核心命令是:hadoop fs –mkdir

将linux本地的文件挪动到hadoop的上述文件夹下。核心命令是:hadoop fs -put

文件名是sort.txt 里边的内容是:

5 3

5 2

4 1

2 2

1 1

4)在hadoop的bin目录下,执行以下命令:

hadoop jar ../code/hadoopst.jar com/gongyunit/hadoop/hdfsst/TestSortGroup /user/root/input/sort.txt /user/root/output

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180819G00A9900?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励