2012-04-18 42 views
3

我在HDFS中有兩種不同數據格式的文件。如果我需要減少這兩個數據文件,工作設置會如何?Hadoop從多種輸入格式中減少

例如想象一下常見的字數問題,在一個文件中你有空間作爲世界分界符,而在另一個文件中是下劃線。在我的方法中,我需要不同的映射器來處理各種文件格式,而不是傳送到通用的縮放器。

如何做到這一點? 還是有比我更好的解決方案嗎?

回答

4

查看MultipleInputs類,解決這個確切的問題。這是相當整潔 - 你通過InputFormat和可選的Mapper類。

如果您在Google上查找代碼示例,請搜索「Reduce-side join」,這是此方法通常使用的位置。


另一方面,有時我發現使用黑客更容易。例如,如果您有一組文件以空格分隔,另一組文件以下劃線分隔,則使用相同的映射器和TextInputFormat加載兩個文件,並在兩個可能的分隔符上加上標記。計算兩個結果集中的令牌數量。在單詞計數的例子中,選擇一個更多的令牌。

如果兩個文件都是相同的分隔符,但標準列的數量不同,這也適用。你可以在逗號上標記化,然後看看有多少個標記。如果它說5令牌它來自數據集A,如果它是7令牌它是來自數據集B.

+0

謝謝,MultipleInputs類正是我一直在尋找的!在哪裏可以找到這些信息(除了在這裏問)?我嘗試了hadoop wiki,javadoc和google ... – konstantin 2012-04-18 21:50:58

+0

我第一次看到這個特別的一個是在Tom White的Hadoop:權威指南。像'MultipleInputs'這樣的寶石有很多,但沒有很好的記錄。我真的很難找到這個谷歌,因爲我不記得確切的類名。 SO今天可能是Hadoop中比較晦澀的地方最好的地方。 – 2012-04-18 21:59:08