我们如何控制应该放在特定的reducer中的特定键?有人可以帮我解决这个问题吗?

最佳答案

partitioner是控制将哪些键发送到特定还原器的主要机制。



默认的分区程序是HashPartitoner,它使用键对象的hashCode()来确定将给定键发送给哪个还原。

在驱动程序中,您可以使用以下方法设置其他分区程序:

job.setPartitionerClass(Class<? extends Partitioner> cls)

自定义分区程序实现Partitioner<K2, V2>接口(interface),该接口(interface)具有需要实现的单个方法getPartition(KEY key, VALUE value, int numPartitions)

例如,HashPartitionergetPartition实现如下所示:
public int getPartition(K2 key, V2 value,int numReduceTasks) {
  return (key.hashCode() & Integer.MAX_VALUE) % numReduceTasks;
}

09-30 20:53