在执行MR程序时我们可能想要将不同的数据放到不同的文件中。比如说想要将相同省份的信息放到一个文件中,不同省份的信息放在不同的文件中。这个时候如果有多个reduce的话就可以将相同的省份放到同一个reduce中,这样就可以将相同的省份放到同一个文件中。
partition是在map阶段完成后执行的。将分好区的数据传输到reduce端。mapreduce中默认的分区是HashPartition。
源代码如下:
public class HashPartition<K , V> extends Partition<K , V>
{
public int getPartition(K key,V value,int numReduceTasks){
return (key.hashCode()&Integer.MAX_VALUE) % numReduceTasks;
}
}
key,value为map端传来的kay,value值,numReduceTasks是reduce的数量,具有相同key的数据返回的数据是相同的,也就可以分配到同一个reduce上去执行。
如果想要实现自定义的分区就可以重写这个getPartition方法即可。