我需要使用Java在mapreduce程序中解析PDF文件。我正在使用CDH 5.0.1進行羣集設置。我有一個由FileInputFormat擴展的自定義輸入格式類,其中我重寫了getRecordReader方法來返回自定義RecordReader的實例,並且isSplitable方法可以防止文件如本文SO answer中所建議的那樣是不可拆分的。Java MapReduce程序在PDF文件上工作
現在的問題是,在當前的CDH API中,getRecordReader返回接口org.apache.hadoop.mapred.RecordReader,而在上面的SO答案中擴展到自定義Record Reader時,是一個抽象類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沒有getRecordReader方法,而它有一個createRecordReader。 – Harman 2014-11-25 15:50:37
此外,我可以在同一個API中看到兩個類,即CDH 5.0.1 - Hadoop 2.3.0,但不包含任何已列爲棄用的類。 在這裏,我給出了同一個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 2014-11-25 16:06:09
你是正確的舊api還沒有被depricated,以支持遺留代碼。如果你正在做一個新的代碼,我建議使用新的API實現。要找到差異,請參閱答案中的更新。 – 2014-11-26 05:08:51