- 这个可以将不同类型的数据在输出的时候进行分类,分类到不同的文件中
步骤
- 继承Partitioner,实现getPartition方法
- 分区是从0开始的,即0就是第一个分区
- 由于分区是在Map阶段之后的,一次Partition的泛型是map端输出的
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Partitioner;
public class partition extends Partitioner<Text,Flowbean> {
@Override
public int getPartition(Text text, Flowbean flowbean, int i) {
//这一步是获取电话的前三位数字
String prePhoneNum = text.toString().substring(0,3);
int partition = 4;//五个分区,从0开始算
if("136".equals(prePhoneNum)){
partition = 0;
}else if ("137".equals(prePhoneNum)){
partition = 1;
}else if ("138".equals(prePhoneNum)){
partition = 2;
}else if ("139".equals(prePhoneNum)){
partition = 3;
}else {
partition = 4;
}
return partition;
}
}
- 还要再Driver类里加上一句代码,来使用自定义分区,否则系统还是会使用默认分区
job.setPartitionerClass(partition.class);