从零开始大数据【1.3】-- mapreduce中的分区
上期回顾:
上一期自定义了mapreduce中kv对可以用的数据类型。并且使用了一个谷歌应用商场数据作为数据集。接下来的案例都会使用这个数据集,在这一节中将学会如何自定义mapreduce过程中的分区。
主要内容
所谓分区,即reducer的数量,一般来说一个reducer将结果输入到一个文件,当需要特定的比如按月输出数据时,就需要多个reducer输出多个文件。默认的partition过程如下:是一个对键取哈希值然后mod设定的reducer数量的值,判断将kv放入哪一个reducer中运行。
public class HashPartitioner<K, V> extends Partitioner<K, V> {
public int getPartition(K key, V value, int numReduceTasks) {
return (key.hashCode() & Integer.MAX_VALUE) % numReduceTasks;
}
}
真实案例
仍然使用上一节的数据集,这一次将game类别的单独输出在一个文件中,其余的在一个文件中。
代码编写
首先定义catpartitioner类