在hadoop中使用mapreduce程序解析pdf文件

cetgtptt  于 2021-06-03  发布在  Hadoop
关注(0)|答案(3)|浏览(456)

我需要解析一个pdf文档。我有一个java程序来解析pdf文件。(当我解析pdf时,我使用了pdf中那些段落的字体信息。我不会将其转换为文本,因为如果我将pdf转换为文本文件,我将丢失我的字体信息。因此,我直接使用ApachePDFBox用字体信息解析pdf。我使用以下代码加载pdf文件

String inputFile = "/home/Desktop/CTT/bcreg20130702a.pdf";
File input = new File(inputFile);
pd = PDDocument.load(input);

现在我需要编写一个map reduce程序来解析pdf文档。我不能直接使用pdf文件作为mapreduce程序中map()函数的输入。我使用wholefileinputformat将整个文档作为一个单独的split传递,但它提供了byteswritable(值)和filename(键)。
我还有那个pdf的sequencefileformat。
如何将pdfbox与这个sequencefileformat或wholefileinputformat一起使用?它应该保留它的字体信息也。没有字体信息,我不能解析我的pdf。

lbsnaicq

lbsnaicq1#

map reduce需要来自hdfs的输入路径。因此,您可以将本地文件上载到某个路径/文件夹中的hdfs(使用javaapi),并将其用作map reduce的输入。

8qgya5xd

8qgya5xd2#

您说您正在使用自己的自定义inputformat(wholefileinputformat)而不是byteswriteable使用pddocument对象作为Map值,并在wholefilerecordreader(custome reader)的nextkeyvalue()中将pdf的全部内容加载到pddocument中。还要确保ur issplitable()返回false,以便加载整个pdf。

eiee3dmh

eiee3dmh3#

您可以创建一个sequencefile来包含pdf文件。sequencefile是二进制文件格式。您可以将sequencefile中的每个记录都制作为pdf。为此,您将创建一个从writable派生的类,该类将包含pdf和您需要的任何元数据。然后可以使用任何javapdf库(如pdfbox)来操作pdf。

相关问题