2012-06-12 3 views
2

지도 축소 작업의 출력 파일이있는 곳의 OUTPUT 디렉토리가 있습니다. 출력 파일은 TextOutputFormat으로 작성된 텍스트 파일입니다.Hadoop의 텍스트 리더 클래스

이제 출력 파일에서 키 값 쌍을 읽고 싶습니다. hadoop의 기존 클래스를 사용하여 어떻게 그렇게 할 수 있습니까?

FileSystem fs = FileSystem.get(conf); 
FileStatus[] files = fs.globStatus(new Path(OUTPUT + "/part-*")); 
for(FileStatus file:files){ 
    if(file.getLen() > 0){ 
    FSDataInputStream in = fs.open(file.getPath()); 
    BufferedReader bin = new BufferedReader(new InputStreamReader(
     in)); 
    String s = bin.readLine(); 
    while(s!=null){ 
     System.out.println(s); 
     s = bin.readLine(); 
    } 
    in.close(); 
    } 
} 

이 방식이 작동하지만 지금은 수동으로 각 라인에서 키 값 쌍을 구문 분석을 필요로하는 많은 내 작업을 증가 것을 다음과 같이 내가 할 수있는 한 가지 방법은이었다. 나는 좀 더 편리한 것을 찾고 있는데, 이는 직접적으로 몇몇 변수에서 키와 값을 읽을 수있게 해준다.

+0

다음은 hadoop의 Reader 클래스 목록입니다. - http://www.buggybread.com/2015/09/apache-hadoop-list-of-reader-classes.html. 도움이 될 것입니다. –

답변

1

이전 작업에서 출력 형식으로 TextOutputFormat을 사용해야합니까?

그렇다면 SequenceFileOutputFormat 사용을 고려한 다음 SequenceFile.Reader를 사용하여 키/값 쌍으로 파일을 다시 읽을 수 있습니다. 또한 여전히 '보기'hadoop fs -text path/to/output/part-r-00000

편집을 사용하여 파일을 수행 할 수 있습니다 : 당신은 또한 KeyValueLineRecordReader 클래스를 사용할 수 있습니다, 당신은 TEH 생성자에 FileSplit에 전달해야 만합니다.

+0

사람이 읽을 수 있도록 출력 파일이 필요하기 때문에 TextOutputFormat을 사용하고 있습니다. 나는 당신이 제안한 것을 이미 고려했다. 고마워. 그것이 나의 최후의 수단이 될거야. – Apurv