2012-02-24 50 views
5

我必须解析HDFS中Hadoop中Map Reduce程序中的PDF文件。所以我从HDFS获得PDF文件输入拆分,它必须被解析并发送到映射类。为了实现这个InputFormat,我经历了这个link。这些输入分裂如何被解析并转换为文本格式?解析Hadoop Map中的PDF文件Reduce

+0

此答案可能是你正在寻找的一部分:http://stackoverflow.com/a/9298965/698839 – 2012-02-24 20:52:35

回答

6

在Hadoop中处理PDF文件可以通过扩展FileInputFormat类来完成。让类扩展它为WholeFileInputFormat。在WholeFileInputFormat类中,您重写getRecordReader()方法。现在每个pdf将作为单独输入拆分收到。然后这些个别拆分可以被解析以提取文本。这个link给出了一个理解如何扩展FileInputFormat的明确例子。

1

这取决于你的分裂。我认为(可能是错误的),您需要将每个PDF作为一个整体来解析它。有Java库可以做到这一点,Google知道它们在哪里。

鉴于此,您需要使用一种方法,在准备分析文件时将文件作为整体。假设你想在映射器中这样做,你需要一个将整个文件传送给映射器的读取器。你可以写自己的读者来做到这一点,或者也许已经有一个。您可能会构建一个扫描PDF目录的阅读器,并将每个文件的名称作为关键字传递给映射器,并将内容作为值传递给映射器。

+0

实现WholeFileInput格式,而不是CombileFileInput格式解决了这个问题。因此,在WholeFileInput格式中,每个PDF文件将作为单个输入拆分接收。然后这些输入分割可以完全解析。 – WR10 2012-02-25 09:56:09

+0

另外,当试图将整个文件解析为单个拆分时,所读取文件的大小是不是瓶颈?考虑一个TB文件的大小,如果有一个文件,那么它必须在一台机器上进行强制解析。我们如何克服这个瓶颈? – WR10 2012-02-27 08:55:08

+0

那么,首先要确定是否真的需要整个PDF才能解析它。如果不是,那就解决了这个问题。 假设你不能分解它,那么我认为你必须通过文件名作为分割,并在你的映射器中直接从HDFS读取。 – 2012-02-27 13:00:32