按照用电总量进行排序
排序: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
读进来的是一行数据,需要对数据进行处理
按照制表符来进行切分
类似写入洗衣房,空调等
ElectricWritalbe ele =new ElectricWritable(year,cf,kt,xyf,sum);
context.write(ele,NullWritable.get());
8、不用reducer,mapper写完之后就是compareApp
首先new一个Configuration
setjarByClass-setMapperClass-setMapOutputKeyClass-setMapOutputValueClass-
对文件进行输入输出
结果如下: