2012-02-24 52 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