我正在编写自己的自定义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) {
}
}