1. 程式人生 > >MapReduce自定義分割槽partition的作用和用法

MapReduce自定義分割槽partition的作用和用法

預設分割槽數量為

    key.hash%reducetask的個數

自定義分割槽

    自己定義的

自定義分割槽很簡單,我們只需要繼承抽象類Partitioner,重寫getPartition方法即可,另外還要給任務設定分割槽:

job.setPartitionerClass(),    job.setNumReduceTasks();

就可以了。 

注意: 

自定義分割槽的數量需要和reduce task的數量保持一致。

但是為1也或者大於reducetask也可以,為1的時候所有的資料放到一起,大於的時候則按照分割槽編號來分

例子

import org.apache.hadoop.mapreduce.Partitioner;
public class JiduPartitioner<K, V> extends Partitioner<K, V>{
    @Override
    //自定義partition的數量需要和reduce task數量保持一致
    public int getPartition(K key, V value, int numPartitions) {
        String dname=key.toString();
        switch(dname)
        {
        case "研發部門":return 0;
        case "測試部門":return 1;
        case "硬體部門":return 2;
        case "銷售部門":return 3;
        }
        return 4;
    }
}