我已经定义了一个自定义可写(称为EquivalenceClsAggValue),它在 Hadoop 中有一个 ArrayList 类型的字段(称为aggValues)。使用我的测试数据,Mapper 在 2 中为每个输出条目的aggValues的大小。但是,当我在 Reducer 中检查aggValues的大小时,它给了我不同的大小!也就是说,大小累加(第一个元素有 2,第二个有大小 4,第三个有大小 6,依此类推)。可能是什么问题?
这就是我在 Mapper 中的输出方式:
EquivalenceClsAggValue outputValue = new EquivalenceClsAggValue();
.....
output.collect(new IntWritable(outputValue.aggValues.size()),outputValue);
在减速机中:
public void reduce(IntWritable key, Iterator<EquivalenceClsAggValue> values, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException {
while(values.hasNext()){
EquivalenceClsAggValue e = values.next();
output.collect(new Text(key.toString()), new IntWritable(e.aggValues.size()));
.....
输出是:
2 2
2 4
2 6