我正在编写自己的自定义Partitioner(Old Api),下面是扩展Partitioner类的代码:

public static class WordPairPartitioner extends Partitioner<WordPair,IntWritable> {

   @Override
   public int getPartition(WordPair wordPair, IntWritable intWritable, int numPartitions) {
        return wordPair.getWord().hashCode() % numPartitions;
    }
}

设置JobConf:
conf.setPartitionerClass(WordPairPartitioner.class);

WordPair类包含:
私有(private)文字词;
私有(private)文本邻居;

问题:
1.我收到错误消息:“实际参数类(WordPairPartitioner)无法转换为类(扩展了Partitioner)。
2.这是编写自定义分区程序的正确方法,还是我还需要重写某些其他功能?

最佳答案

我相信您会混合使用旧API(来自org.apache.hadoop.mapred.*的类)和新API(来自org.apache.hadoop.mapreduce.*的类)

使用旧的API,您可以执行以下操作:

import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapred.JobConf;
import org.apache.hadoop.mapred.Partitioner;
public static class WordPairPartitioner implements Partitioner<WordPair,IntWritable> {

   @Override
   public int getPartition(WordPair wordPair, IntWritable intWritable, int numPartitions) {
        return wordPair.getWord().hashCode() % numPartitions;
    }


   @Override
   public void configure(JobConf arg0) {

   }
}

10-07 23:43