我有一组来自映射器的减速器输入:
(1939, [121, 79, 83, 28])
(1980, [0, 211, −113])
我想得到如下输出:
1939 max:121 min:28 avg: 77.75
如果我在我的 reducer 类中不使用如下自定义可写,我可以得到它:
public static class MaxTemperatureReducer
extends Reducer<Text, IntWritable, Text, Text> {
Text yearlyValue = new Text();
@Override
public void reduce(Text key, Iterable<IntWritable> values,
Context context)
throws IOException, InterruptedException {
int sum = 0;
int CounterForAvg = 0;
int minValue = Integer.MAX_VALUE;
int maxValue = Integer.MIN_VALUE;
float avg;
for (IntWritable val : values) {
int currentValue = val.get();
sum += currentValue;
CounterForAvg++;
minValue = Math.min(minValue, currentValue);
maxValue = Math.max(maxValue, currentValue);
}
avg = sum / CounterForAvg;
String requiredValue = "max temp:"+maxValue + "\t" +"avg temp: "+ avg + "\t"+ "min temp: " +minValue;
yearlyValue.set(requiredValue);
context.write(key, yearlyValue);
}
}
但是,使用 customwritable 类会产生以下结果:
1939 121
1939 79
1939 83
1939 28
1980 0
1980 211
1980 -113
这是我如何实现自定义类和减速器。我将可迭代对象发送到自定义类并在那里执行计算。我无法弄清楚我在这里做错了什么。我在 Java 中有 0 exp。
慕容3067478
相关分类