0

マッパーは値を1回だけ出力します。しかし、私がチェックしたとき、コンバイナーは2回値を持っています。これは私には本当に奇妙です。

plsは役立ちます。

出力が送信される場所からのマップコードのモジュール:

for(int i = 0; i<alcmapi.size(); i++)
{
    int section = 0;

    for(int j = 0; j<alcmapj.size(); j++)
    {
        if(!alcmapi.get(i).getid().equals(alcmapj.get(j).getid()))
        {
            int fi = Integer.parseInt(alcmapi.get(i).getField());
            int fj = Integer.parseInt(alcmapj.get(j).getField());

            ArrayList<CustomMap> al = new ArrayList<CustomMap>();
            al.add(new CustomMap(alcmapi.get(i).getid(), fi));
            al.add(new CustomMap(alcmapj.get(j).getid(), fj));


            if(fi<fj)
            {
                section = fi;
            }
            else
            {
                section = fj;
            }
            Collections.sort(al);
            {
                output.collect(new Text(t+" "+al.get(0).getid()), new Text(al.get(1).getid()+"  "+section));         

            }
        }
    }
}

コンバイナーの場合:

ここをチェックすると、キーに対応する値が2倍になっていることがわかります。

while(values.hasNext()){
    String val = values.next().toString();
    System.out.println("val:"+val);
}

前もって感謝します!

4

1 に答える 1

1

すべての要素を他のすべての要素に対してテストしているようです。たとえば、要素3と5が基準を満たしている場合、i = 3、j = 5の場合はペアを1回、i = 5、j=3の場合はもう一度ペアを書き出します。

内部ループを次のように変更することをお勧めします。

for(int j = i+1; j<alcmapj.size(); j++)
于 2012-11-20T23:26:29.317 に答える