打印唯一或不同的值

时间:2012-04-30 07:14:38

标签: map hadoop mapreduce reduce

我是新手来映射reduce并编写一个reduce函数来打印Iterable中的值。下面是我的打印功能:

public class Reduce extends Reducer<Text, Text, Text, Text> {
  protected void reduce(Text key, Iterable<Text> values, Context context) throws IOException, InterruptedException {

      StringBuilder builder = new StringBuilder();
        for (Text value : values) {
        builder.append("<");
          builder.append(value);
          builder.append(",");
          builder.append(key);
          builder.append(">");
          builder.append("\n");
          context.write(new Text(builder.substring(0, builder.length())), key);
        }  
  }

}

输出是:

Output

问题是值重复,即&lt; 2,1&gt;重复2次......我的要求是在&lt; 2,1&gt;之后了。我应该直接得到&lt; 3,1&gt;然后&lt; 4,1&gt;。总之,我所有人都应该是独一无二的。

我的最终输出应该是:

<2,1>
<3,1>
<4,1>
<3,2>
<4,2>
<1,2>
<4,3>

请建议。

1 个答案:

答案 0 :(得分:1)

        StringBuilder builder ;
        for (Text value : values) 
        {
          builder = new StringBuilder();
          builder.append("<");
          builder.append(value);
          builder.append(",");
          builder.append(key);
          builder.append(">");
          builder.append("\n");
          context.write(new Text(builder.substring(0, builder.length())), key);
        }  

试试这个。