WritableComparable排序案例實操(區內排序)
1.需求
要求每個省份手機號輸出的檔案中按照總流量內部排序。
2.需求分析
基於前一個需求,增加自定義分割槽類,分割槽按照省份手機號設定。
3.案例實操
(1)增加自定義分割槽類
package com.atguigu.mapreduce.sort;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Partitioner;
public class ProvincePartitioner extends Partitioner<FlowBean, Text> {
@Override
public int getPartition(FlowBean key, Text value, int numPartitions) {
// 1 獲取手機號碼前三位
String preNum = value.toString().substring(0, 3);
int partition = 4;
// 2 根據手機號歸屬地設定分割槽
if (“136”.equals(preNum)) {
partition = 0;
}else if (“137”.equals(preNum)) {
partition = 1;
}else if (“138”.equals(preNum)) {
partition = 2;
}else if (“139”.equals(preNum)) {
partition = 3;
}
return partition;
}
}
(2)在驅動類中新增分割槽類
// 載入自定義分割槽類
job.setPartitionerClass(ProvincePartitioner.class);
// 設定Reducetask個數
job.setNumReduceTasks(5);