0

カスタムキーを使用したmapreduceジョブのcompareTo中にインスタンス変数の値を変更する方法はありますか?(2つのメソッド= readFields(DataInput in)とwrite(DataOutput out)を使用してデータを読み書きするため、いくつかの問題があります。また、オブジェクトをフレームワークに初めて書き込むだけで、残りの部分は変更できません。プロセス)

カスタムキーのcompareTo用にこのコードがあります

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

コメントされた行は機能しない行です

フェーズを減らす場合、メソッドgetChiaviComplete()はnullを返します。これは、インスタンス変数(chiaviComplete)を初期化して(write(DataOutput out)メソッドを使用して)書き込んだときの値です。

4

1 に答える 1

0

比較対象のレコードはレコードの単なるコピーであるため、比較中にキーを変更することはできません。オブジェクトを変更してもレコードは変更されません。

于 2013-08-26T07:27:36.273 に答える