我是新手来映射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);
}
}
}
输出是:
问题是值重复,即&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>
请建议。
答案 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);
}
试试这个。