我们如何控制应该放在特定的reducer中的特定键?有人可以帮我解决这个问题吗?
最佳答案
partitioner是控制将哪些键发送到特定还原器的主要机制。
默认的分区程序是HashPartitoner,它使用键对象的hashCode()
来确定将给定键发送给哪个还原。
在驱动程序中,您可以使用以下方法设置其他分区程序:
job.setPartitionerClass(Class<? extends Partitioner> cls)
自定义分区程序实现
Partitioner<K2, V2>
接口(interface),该接口(interface)具有需要实现的单个方法getPartition(KEY key, VALUE value, int numPartitions)
。例如,
HashPartitioner
的getPartition
实现如下所示:public int getPartition(K2 key, V2 value,int numReduceTasks) {
return (key.hashCode() & Integer.MAX_VALUE) % numReduceTasks;
}