Hadoop的I/O接口--自定义排序-电费

按照用电总量进行排序

排序:mapper溢写到磁盘的时候进行排序。map的溢写文件合并的时候也要进行排序,reducer将相同的分区拉取到同一个节点进行合并的时候也要进行排序。
如果想要进行自定义排序,需要实现WritableComplarable接口

在这里插入图片描述
官网排序注意点

在这里插入图片描述
继承什么就是什么的一个子类,继承了Writable就是已经序列化了
compareTo是进行比较的

如何实现按照sum用电总量进行排序

开发ElectricWritable对象,实现WritableComparable接口

1、定义对象
在这里插入图片描述
2、要注意你要和谁比较,,要和key来比较
在这里插入图片描述

3、将内容复制过来
write,readFileds的方法

在这里插入图片描述

4、唯一的不同点就是多了另一个方法compareTo()-这是一个进行比较的方法

–倒序进行排序
o-other:其他的一些对象
在这里插入图片描述
在这里插入图片描述
强制类型转换
如果是正序的话就是return(int)(this.sum-other.sum)
5、倒叙排序之后就要输出
要把ElectricWritalbe作为一个key
直接定义一个toString方法-注意格式
在这里插入图片描述
在这里插入图片描述
这里需要复制一下-内容一样

6、将上一次的程序输出的结果进行排序
注意这里处理的不是electric.txt文件,而是part-r-00000文件
只进行的操作是排序
所以这一次的开发只开发一个mapper就行了

在这里插入图片描述
继承mapper类
7、类里面的内容
value用不到,但是泛型还一定要定义,不然会报错
在这里插入图片描述
输出的key类型是ElectricWritable,输出的value类型是NullWritable
如果value不需要的话,设置成NullWritable
map读进来的是一行数据,需要对数据进行处理
按照制表符来进行切分
在这里插入图片描述
在这里插入图片描述
类似写入洗衣房,空调等
ElectricWritalbe ele =new ElectricWritable(year,cf,kt,xyf,sum);
context.write(ele,NullWritable.get());

8、不用reducer,mapper写完之后就是compareApp
在这里插入图片描述
首先new一个Configuration

在这里插入图片描述
setjarByClass-setMapperClass-setMapOutputKeyClass-setMapOutputValueClass-
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
对文件进行输入输出
结果如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值