MapReduce--->分区Partition

简单简绍
  • 这个可以将不同类型的数据在输出的时候进行分类,分类到不同的文件中

步骤

  • 继承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);