【发布时间】:2013-11-02 19:27:14
【问题描述】:
我有三个 reducer,我需要它们每个都接收相同的密钥,如下所示:
GOOG - Reducer 0
AAPL - Reducer 1
VMW - Reducer 2
在分区器中,getPartition() 方法应返回一个 int 值,指示化简器的索引(0,1,2)之一。
我拥有的getPartition()的实现是:
return ((CompositeKey) key).getSymbol().hashCode() % numReduceTasks;
然而这在我这里是行不通的:
int numReduceTasks = 3;
System.out.println("GOOG".hashCode() % numReduceTasks);//output: 0
System.out.println("AAPL".hashCode() % numReduceTasks);//output: 1
System.out.println("VMW".hashCode() % numReduceTasks);//output: 1
所以在我得到的输出文件中
.../part-r-00000
GOOG
.../part-r-00001
AAPL
VMW
.../part-r-00002
<empty>
问题是我该如何解决这个问题?即我如何编写一个分区函数来保证相同的键进入同一个减速器。
【问题讨论】:
标签: hadoop partitioner