gpt4 book ai didi

hadoop - Hadoop 中 Reducer 的错误输入值

转载 作者:可可西里 更新时间:2023-11-01 14:59:28 25 4
gpt4 key购买 nike

我定义了一个自定义可写(称为 EquivalenceClsAggValue),它在 Hadoop 中有一个 ArrayList 类型的字段(称为 aggValues)。使用我的测试数据,2 中 Mapper 的每个输出条目的 aggValues 的大小。但是,当我检查 Reducer 中 aggValues 的大小时,它给了我不同的尺寸!也就是说,大小累加(第一个元素有 2,第二个有大小 4,第三个有大小 6,等等)。可能是什么问题?

这是我在 Mapper 中的输出方式:

EquivalenceClsAggValue outputValue = new EquivalenceClsAggValue();
.....

output.collect(new IntWritable(outputValue.aggValues.size()),outputValue);

在 Reducer 中:

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

最佳答案

在您的 readFields 方法中,您需要清除数组列表的任何先前内容 - Hadoop 在调用之间重复使用相同的对象。

抱歉,我在 your previous post 中错过了这个:

@Override
public void readFields(DataInput arg0) throws IOException {
// add this statement to clear out previous contents
aggValues.clear();

int size = arg0.readInt();

for (int i=0;i<size;i++){
SortedMapWritable tmp = new SortedMapWritable();
tmp.readFields(arg0);
aggValues.add(tmp);
}
}

关于hadoop - Hadoop 中 Reducer 的错误输入值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14269085/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com