I actually just ran into the same problem. Took an evening of poking around to see what was going on. What appears to be going on is that the Iterable<Text> values seemed to be reusing the Text object being exposed in the for loop and just changing the content of the Text.

Try doing this instead:

for(Text val:values){
        activeList.add(new Text(val.toString));
        context.write(key, activeList.get(0));
}

I was using a custom object that implemented Writable and instead of getting a list of objects, I got n copies of the same object in my list. By copying the object out of the values Iterable into a new object that I then inserted into my list everything worked properly.

Hope this helps,

Bryan



On Dec 23, 2009, at 3:01 AM, oo famcr wrote:

Hello everyone
I want to save the value to a LinkedList, but THE ***activeList.get(0)***
have been changed every time.
I think it should be the first element, but it's not

Thanks
Song

==========Part of WordCount===========
 public static class IntSumReducer
      extends Reducer<Text,Text,Text,Text> {
   private List<Text> activeList = new LinkedList<Text>();
   public void reduce(Text key, Iterable<Text> values,
                      Context context
                      ) throws IOException, InterruptedException {
     for (Text val : values) {
       activeList.add(val);
       context.write(key, new Text(  activeList.get(0).toString()  ));
     }
   }

Reply via email to