【问题标题】:Parsing PDF files in Hadoop Map Reduce在 Hadoop Map Reduce 中解析 PDF 文件
【发布时间】:2012-03-14 17:25:18
【问题描述】:

我必须在 Hadoop 的 Map Reduce 程序中解析 HDFS 中的 PDF 文件。所以我从 HDFS 获取 PDF 文件作为 Input splits 并且它必须被解析并发送到 Mapper 类。为了实现这个 InputFormat 我经历了这个 link 。如何将这些输入拆分解析并转换为文本格式?

【问题讨论】:

标签: pdf hadoop mapreduce pdf-parsing


【解决方案1】:

在 Hadoop 中处理 PDF 文件可以通过扩展 FileInputFormat 类来完成。让扩展它的类是 WholeFileInputFormat。在 WholeFileInputFormat 类中,您覆盖 getRecordReader() 方法。现在每个 pdf 都将作为 单独的输入拆分 接收。然后可以解析这些单独的拆分以提取文本。这个link 给出了一个了解如何扩展 FileInputFormat 的清晰示例。

【讨论】:

    【解决方案2】:

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

    鉴于此,当您准备好解析文件时,您需要使用一种方法,将文件作为一个整体。假设您想在映射器中执行此操作,您需要一个将整个文件交给映射器的阅读器。您可以编写自己的阅读器来执行此操作,或者可能已经有一个。您可以构建一个阅读器来扫描 PDF 目录并将每个文件的名称作为键传递给映射器,并将内容作为值传递。

    【讨论】:

    • 实现 WholeFileInput 格式而不是 CombileFileInput 格式解决了这个问题。因此,在 WholeFileInput 格式中,每个 PDF 文件都将作为单个输入拆分接收。然后可以完全解析这些输入拆分。
    • 另外,当尝试将整个文件解析为单个拆分时,正在读取的文件的大小不会成为瓶颈吗?考虑一个大小为 TB 的文件,如果只有一个文件,则必须在一台机器上强制解析它。我们如何克服这个瓶颈?
    • 好吧,首先确定是否真的需要整个 PDF 才能解析它。如果没有,那就解决了这个问题。假设您不能将其分解,那么我认为您必须将文件名作为拆分传递,并直接从映射器中的 HDFS 读取。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多