我正在尝试创建一个由两个步骤组成的 mapreduce 链。第一个 reduce 将键值对作为 (key, value) 发出,其中 value 是自定义对象的列表,第二个映射器应该读取第一个 reducer 的输出。该列表是一个自定义的 ArrayWritable。以下是相关代码:
class MyArrayWritable extends ArrayWritable {
public MyArrayWritable() {
super(Custom.class);
}
public MyArrayWritable(Writable[] values) {
super(Custom.class, values);
}
@Override
public Custom[] get() {
return (Custom[]) super.get();
}
@Override
public String toString() {
return Arrays.toString(get());
}
@Override
public void write(DataOutput arg0) throws IOException {
super.write(arg0);
}
}
第二个映射器(将自定义 arraywritable 作为值):
public static class SecondMapper extends Mapper<Text, MyArrayWritable, Text, IntWritable> {
public void map(Text key, MyArrayWritable value, Context context) throws IOException, InterruptedException {
//other code
context.write(key, myNewWritableArray);
}
}
当第二个作业开始时,我收到此错误:错误:java.lang.RuntimeException: java.lang.NoSuchMethodException: Detector$MyArrayWritable.< init >()
我该如何解决?我已经在 MyArrayWritable 中实现了默认构造函数