簡化我的問題,我有一組帶有由雙換行符分隔的「記錄」的文本文件。像使用Hadoop將文本文件中的段落處理爲單個記錄
'多行文字'
'空行'
'多行文字'
'空行'
等等。
我需要分別轉換每個多行單元,然後對它們執行mapreduce。
但是,我知道使用hadoop代碼樣板中的默認wordcount設置,以下函數中value
變量的輸入只是一行,並且不能保證輸入與之前的輸入連續線。
public void map(LongWritable key, Text value,
OutputCollector<Text, IntWritable> output,
Reporter reporter) throws IOException ;
而且我需要它,輸入value
實際上是雙新行的一個單元分隔的多行文字。
一些搜索變成了一個RecordReader
類和一個getSplits
方法,但沒有簡單的代碼示例,我可以包裹我的頭。
另一種解決方案是用多個空格字符替換多行文本中的所有換行符,並用它來完成。我寧願不這樣做,因爲它有相當多的文本,並且在運行時方面很耗時。如果我這樣做,我也必須修改很多代碼,所以通過hadoop處理它對我來說最具吸引力。
當我需要處理超過64MB的文件或者hadoop開始分割文件時,您的回覆實際上會更有幫助。 – JasonMond 2011-06-17 03:26:54