2012-11-20 6 views
0

매퍼는 값을 한 번만 출력합니다. 하지만 결합기가 값을 두 번 가지고 있는지 확인했을 때. 이것은 나에게 정말로 이상합니다.결합 자에서 Mapper 출력이 두 배로됩니다.

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

      } 
     } 
    } 
} 

: 여기 확인할 때 I는 키에 대응하는 값이 두배로 나타나는 참조

:

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

미리 감사드립니다!

+0

표현을't()'루프 인덱스에 의존하지 않는'j'가 있도록 내부 루프 반복마다 출력됩니다. – rsp

+0

내 내부 루프에 따라 다릅니다. 행 확인 : ArrayList al = new ArrayList (); al.add (새 CustomMap (alcmapi.get (i) .getid(), fi)); al.add (새 CustomMap (alcmapj.get (j) .getid(), fj)); –

+0

이 문제에 대한 도움 pls –

답변

1

다른 모든 요소에 대해 모든 요소를 ​​테스트 한 것처럼 보입니다. 예를 들어 요소 3과 5가 기준을 충족하면 i = 3, j = 5에 대해 한 번, i = 5, j = 3에 대해 다시 한 번 씁니다.

나는 당신이 당신의 내부 루프를 변경 제안 : + ""+ al.get (0) .getid

for(int j = i+1; j<alcmapj.size(); j++) 
+0

답장을 보내 주셔서 감사합니다. 이 사건이 ... –