2011-09-01 99 views
0

我的hadoop M/R作業的輸入文件是一個文本文件,其中記錄由製表符'\ t'而不是換行'\ n'分隔。如何指示hadoop使用製表符分割,默認情況下,它將圍繞換行符進行分割,並將文本文件中的每一行作爲記錄。如何將tab指定爲hadoop輸入文本文件的記錄分隔符?

一種方法是使用自定義輸入格式類,該類使用濾鏡流將原始流中的所有選項卡轉換爲換行符。但這看起來不太優雅。

另一種方法是使用java.util.Scanner和tab作爲分隔符。但我不知道如何在輸入格式類中使用java.util.Scanner類。

什麼是最佳方法和選擇?

+0

也許我錯過了一些東西,但難道你不能通過將你的記錄放在不同的線上來解決這個問題嗎? 而不是:record1 \ t record2 \ t等。 使用: record1 \ n record2 即 - 如果您可以控制您的輸入格式是什麼。否則,您需要更改輸入格式和記錄讀取器類。 – SubSevn

+0

我無法更改輸入文件。它也被其他應用程序使用。 – nabeelmukhtar

+0

然後你可能不得不做一些已經發布的答案。 – SubSevn

回答

1

在org.apache.hadoop.util.LineReader類中硬編碼值'\ r'和'\ n',因此不能使用TextInputFormat和製表符分隔的記錄。但是用特殊的LineReader類實現自己的InputFormat並不困難。最簡單的解決方案是複製粘貼TextInputFormat,LineRecordReader和LineReader類,將它們移動到您的包並更改LineReader實現。

相關問題