복붙노트

[HADOOP] ArrayList 요소에 반복 가능

HADOOP

ArrayList 요소에 반복 가능

그래서지도 제작 (mapreduce) 작업을 구현하고 있습니다. 즉, 핵심 가치 쌍을 다루고 있습니다.

변수가 있습니다.

Iterable<FreqDataWritable> values

FreqDataWritable은 정보 조각을 포함하고있는 객체입니다 만, 현재는 보유하고있는 정보 중 getFilename ()에 의해 액세스되는 String에 대해서만 다루고 있습니다.

다음 루프가 있습니다.

ArrayList<String> filenames = new ArrayList<String>();

for(FreqDataWritable i : values) {
    filenames.add(i.getFilename());
}

이제 배열 목록 파일 이름에 값을 인쇄하기 만하면됩니다.

for(int i = 0; i < filenames.size(); i++) {
    System.out.println(filenames.get(i));
}

그러나 내가 이것을 할 때 파일 이름에있는 모든 것은 동일합니다. 인쇄 된 유일한 것은 여러 번 인쇄 된 하나의 파일 이름입니다.

내 원래 코드는 이보다 더 복잡하지만 도움을 위해 단순화했습니다. 누구든지이 문제를 해결하는 방법을 알고 있습니까?

감사

해결법

  1. ==============================

    1.나는 그것을 알아. Hadoop은 이상한 메모리 사용법을 가지고 있으므로, 처음에 값을 반복 할 때 같은 객체를 arraylist에 반복해서 추가하는 것이 었습니다.

    나는 그것을 알아. Hadoop은 이상한 메모리 사용법을 가지고 있으므로, 처음에 값을 반복 할 때 같은 객체를 arraylist에 반복해서 추가하는 것이 었습니다.

    대신 나는 이것을 할 필요가있다.

    for(FreqDataWritable i : values) {
        filenames.add(new String(i.getFilename()));
    }
    
  2. ==============================

    2.

    for(String filename : filenames) {
      System.out.println(fn);
    }
    

    이것이 도움이 될지 알려주시겠습니까?

  3. ==============================

    3.반복기 기반 방법을 사용해 보셨습니까?

    반복기 기반 방법을 사용해 보셨습니까?

    Iterator i = values.iterator();
    fileNames.add(i.next().getFileName());
    for(i; i.hasNext();) {
        String stringI = i.next().getLast().getFileName();
        if(!stringI.equals(fileNames.get(fileNames.size() - 1)))
            fileNames.add(i.next().getLast().getFileName());
    }
    
  4. from https://stackoverflow.com/questions/23329173/iterable-to-arraylist-elements-change by cc-by-sa and MIT license