map-reduce代码的输出是什么?

时间:2012-05-21 17:31:10

标签: java hadoop mapreduce

public static class MapClass extends MapReduceBase implements
        Mapper<LongWritable, Text, Text, IntWritable> {

    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(line);

       IntWritable one = new IntWritable(num);

        word.set(“key”);
        output.collect(word, one);

    }
}

public static class Reduce extends MapReduceBase implements
        Reducer<Text, IntWritable, Text, IntWritable> {

    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(count));
    }
}

具体看看output.collect(),我正在打印密钥&amp;计算值.. 对于任何输入文件,输出为 键2 请帮帮我....(即使输入100输出,输出总是2如何?)

1 个答案:

答案 0 :(得分:0)

如果您想测试代码,

这是一个使用mockito框架的JUNIT测试,假设你在示例类中有你的reducer和mapper。

@RunWith(MockitoJUnitRunner.class)
 public class TestMapper {

 @Mock
 OutputCollector<Text, IntWritable> output;

 @Mock
 Reporter reporter;

 @Test
 public void testMap() throws Exception {
    ExampleClass.MapClass mapper = new ExampleClass.MapClass();
    mapper.map(new LongWritable(0), new Text("1"), output, reporter);
    mapper.map(new LongWritable(0), new Text("2"), output, reporter);
    mapper.map(new LongWritable(0), new Text("3"), output, reporter);
    verify(output, times(1)).collect(new Text("key"), new IntWritable(1));
    verify(output, times(1)).collect(new Text("key"), new IntWritable(2));
    verify(output, times(1)).collect(new Text("key"), new IntWritable(3));
 }

 @Test
 public void testReduce() throws Exception {
    ExampleClass.Reduce reducer = new ExampleClass.Reduce();
    List<IntWritable> list = Arrays.asList(new IntWritable(1), new IntWritable(2), new IntWritable(3));

    reducer.reduce(new Text("key"), list.iterator(), output, reporter);

    verify(output, times(1)).collect(new Text("key"), new IntWritable(3));
 }
}