我无法在计算output.collect的数字平均数后返回flaot值。有人可以帮帮我吗?
公共静态类MapClass扩展了MapReduceBase 实现Mapper {
private Text word = new Text();
public void map(LongWritable key, Text value,
OutputCollector<Text, IntWritable> output,
Reporter reporter) throws IOException {
String line = value.toString();
String num = Integer.parseInt(num);
IntWritable one = new IntWritable(num);
word.set(“key”);
output.collect(word, one);
}
}
public static class Reduce扩展了MapReduceBase 实现Reducer {
public void reduce(Text key, Iterator<IntWritable> values,
OutputCollector<Text, IntWritable> output,
Reporter reporter) throws IOException {
int sum = 0;
int count=0;
int avg=0;
while (values.hasNext()) {
sum += values.next().get();
count++;
}
avg=sum/count;
output.collect(key, new IntWritable(avg));
}
}
答案 0 :(得分:2)
您是使用org.apache.hadoop.io.FloatWritable
作为输出键还是值类型(您想将浮动存储在哪里?
您需要修改Generics签名到mapper / reduce(取决于您计算平均值的位置),并修改您的作业配置以使用FloatWritable作为输出类类型(再次取决于您是否'重新使用float作为输出键或值)。
如果您仍然遇到问题,请将一些代码发回到您的问题中