Java를 사용하여 mapreduce 프로그램에서 PDF 파일을 구문 분석해야합니다. CDH 5.0.1을 사용하는 클러스터 설치입니다. 사용자 정의 RecordReader의 인스턴스를 반환하는 getRecordReader 메서드를 재정의 한 FileInputFormat과이 SO answer에 제안 된대로 파일을 분할 할 수 없도록하는 isSplitable 메서드로 확장 한 사용자 지정 입력 형식 클래스가 있습니다.Java MapReduce 프로그램이 PDF 파일에서 작동합니다.
현재의 CDH API에서 getRecordReader가 Interface org.apache.hadoop.mapred.RecordReader를 리턴하는 반면, 위의 SO 응답에서 사용자 정의 레코드 판독기로 확장 된 것은 추상 클래스 org.apache.hadoop입니다. mapreduce.RecordReader.
내 사용자 정의 입력 형식 클래스 :
import org.apache.hadoop.mapred.FileInputFormat;
import org.apache.hadoop.mapred.RecordReader;
public class PDFInputFormat extends FileInputFormat<Text, Text> {
@Override
public RecordReader<Text, Text> getRecordReader(InputSplit split, JobConf conf, Reporter reporter) throws IOException {
return new PDFRecordReader();
}
@Override
protected boolean isSplitable(FileSystem fs, Path filename) {
return false;
}
}
내가 여기 실종 무엇인지에 어떤 도움이나 포인터를 주셔서 감사합니다.
감사합니다,하지만 내가 제안 된 API를 사용하는 경우 FileInputFormat 그것이 createRecordReader을 가지고 오히려 getRecordReader 방법이 없습니다. – Harman
또한 같은 API (예 : CDH 5.0.1 - Hadoop 2.3.0)에서 두 가지 클래스를 사용할 수 있지만 deprecated로 나열되지 않습니다. 여기에서는 동일한 API에 대한 두 클래스에 대한 링크를 제공했습니다. [org.apache.hadoop.mapred.FileInputFormat] (http://archive-primary.cloudera.com/cdh5/cdh/5/hadoop-2.3.0-cdh5.0.1/api/index.html?org/apache /hadoop/mapred/FileInputFormat.html) [org.apache.hadoop.mapreduce.lib.input.FileInputFormat] (http://archive-primary.cloudera.com/cdh5/cdh/5/hadoop-2.3.0- cdh5.0.1/api/index.html? org/apache/hadoop/mapred/FileInputFormat.html) – Harman
기존 API를 지원하기 위해 이전 api가 아직 손상되지 않았 음을 확인했습니다. 새 코드를 작성하면 새로운 API 구현. 차이점을 찾으려면 답변의 업데이트를 참조하십시오. –