分区实现

假设需求:假设现在数据量很大,数据从map端处理完以后,我们要把不同手机号码段的手机号放到不同的文件里面,比如以135开头的,给他放到一个文件里面,136开头的放到一起,137开头的放到一起等等等等;

就在刚才的项目中,新建一个provincepartitioner类:

package MR.phone;

import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Partitioner;

public class ProvincePartitioner extends Partitioner<Text,PhoneBean> {
@Override
public int getPartition(Text text, PhoneBean phoneBean, int i) {
//设置分区号
int partition=4;
String preNum = text.toString().substring(0, 3);
if("135".equals(preNum)){
partition=0;
}else if("136".equals(preNum)){
partition=1;
}else if("139".equals(preNum)){
partition=2;
}else if("137".equals(preNum)){
partition=3;
}
return partition;
}
}

 

在写好的Driver类中加上我们自己定义的分区:

 

 

最后运行结果是这样:

 

 这样,以不同的号码开头的手机号就被写到五个文件里面了。

 

posted @ 2022-04-19 14:56  码码小菜鸟  阅读(53)  评论(0)    收藏  举报