2012-10-25 122 views
0

compareTo过程中更改密钥中的值在使用自定义密钥的mapreduce作业的compareTo过程中,有更改实例变量的值的方法吗? (我有一些问题,因为它使用两种方法读取和写入数据= readFields(DataInput in)和write(DataOutput out),并且它只在第一次将对象写入框架,而我无法修改其余部分过程)在hadoop mapreduce

我有此代码为我的我的自定义键

@Override 
    public int compareTo(MultipleText m1) { 
     for(Writable one : m1.getChiavi().keySet()) 
     { 
      if(this.chiavi.keySet().contains(one)) 
      { 
       if(this.chiavi.get(one).equals(m1.getChiavi().get(one))) 
        if(!strutturaTab.equals(m1.getStrutturaTab())) 
        { 
//      if(this.chiavi.size()>m1.getChiavi().size()) 
//       m1.setChiaviComplete(this.chiavi); 
//      else if(this.chiavi.size()<m1.getChiavi().size()) 
//       this.setChiaviComplete(m1.getChiavi()); 
         return 0; 
        } 
       return 1; 
      } 
      return 2; 
     } 
     return -1; 
    } 

的的compareTo注释行是doesen't作品

当它减少相法getChiaviComplete

(行)返回null,这是我初始化和写入时的值(使用write(DataOutput out)方法)实例变量(chiaviComplete )

回答

0

比较过程中不能更改密钥,因为比较的记录只是记录的副本。更改对象不会更改记录。