分区实现
假设需求:假设现在数据量很大,数据从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类中加上我们自己定义的分区:

最后运行结果是这样:

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

浙公网安备 33010602011771号