我需要使用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