我需要使用 Java 在 mapreduce 程序中解析 PDF 文件。我正在使用 CDH 5.0.1 进行集群设置。我有一个由 FileInputFormat 扩展的自定义输入格式类,我在其中覆盖了 getRecordReader 方法以返回自定义 RecordReader 的实例,并覆盖了 isSplitable 方法以防止文件不可拆分,如本 SO answer 中所建议的那样.
现在的问题是,在当前的 CDH API getRecordReader 返回接口(interface) 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(旧 org.apache.hadoop.mapred.*
api)
请使用新的 API (org.apache.hadoop.mapreduce.*
)
org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
org.apache.hadoop.mapreduce.RecordReader;
SO 使用这个新 API 回答您的问题。在新 API 中,RecordReader
是 class
而不是 interface
更新
关于处理 PDF 文件的 Java MapReduce 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27106873/