2012-04-30 5 views
0

Я новичок в карте, уменьшая и записывая функцию уменьшения для печати значений в 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

Проблема в том, что значения становятся повторен т.е. < 2,1> повторяется 2 раза ... Мое требование после того, как < 2,1> Я должен сразу получить < 3,1>, а затем < 4,1>. Короче говоря, все мое должно быть уникальным.

Мой окончательный вывод должен быть:

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

Просьба предложить.

ответ

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

Попробуйте это.

+0

Эй, это сработало ... я настолько тупой ... Я не очищал свой строитель, прежде чем снова использовать его ... Большое вам спасибо :) – user1277070

Смежные вопросы