0

我正在尝试创建一个由两个步骤组成的 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 中实现了默认构造函数

4

0 回答 0