如何在outputcollector.collect中返回浮点值?

时间:2012-05-21 06:06:13

标签: hadoop mapreduce

我无法在计算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));
}

}

1 个答案:

答案 0 :(得分:2)

您是使用org.apache.hadoop.io.FloatWritable作为输出键还是值类型(您想将浮动存储在哪里?

您需要修改Generics签名到mapper / reduce(取决于您计算平均值的位置),并修改您的作业配置以使用FloatWritable作为输出类类型(再次取决于您是否'重新使用float作为输出键或值)。

如果您仍然遇到问题,请将一些代码发回到您的问题中