众所周知,要么这个
public static class SReducer extends MapReduceBase implements Reducer<Text, Text, Text, Text>
{
public void reduce(Text key, Iterator<Text> values, OutputCollector<Text, Text> output, Reporter reporter) throws IOException
{
StringBuilder sb = new StringBuilder();
while (key.hasNext())
{
sb.append(key.next().toString());
}
output.collect(key, new Text(sb.toString()));
}
}
或
public static class Reduce extends MapReduceBase implements Reducer<Text, Text, Text, Text>
{
public void reduce(Text key, Iterator<Text> values, OutputCollector<Text, Text> output, Reporter reporter) throws IOException
{
boolean start = true;
StringBuilder sb = new StringBuilder();
while (values.hasNext())
{
if(!start)
{
start=false;
sb.append(values.next().toString());
}
}
output.collect(key, new Text(sb.toString()));
}
}
这就是我们用来消除输出中重复"值"的化简器函数。但是我应该怎么做才能消除重复的"键"呢?知道吗?谢谢。
PS:更多信息:在我的<键中,值>对,键包含链接,值包含单词。但是在我的输出中,每个单词只出现一次,但我得到许多重复的链接。
在Reducer
中,对于Reducer
接收的每个唯一键,将有一个调用reduce()
。它将接收该键的所有值。但是,如果您只关心键,并且只关心唯一键,那么,完全忽略值即可。每个密钥将只获得一个reduce()
;使用该(非重复)密钥执行任何操作。