2014-05-07 40 views
1

在我的映射器類中,我逐行讀取文件並在每行上執行一些字符串操作(即從字符串中刪除特殊字符),然後在reducer中將每行存儲在新文件中。在Mapper類中執行Reducer操作

基本上,我的reducer只創建文件,並在新文件上寫下每一行,沒有別的東西,所以我的映射器可能會創建文件而不是將數據傳遞給reducer。這意味着我不想要減速器並在映射器中執行其操作。 我對Mapreduce瞭解不多,所以任何類型的幫助都是可觀的

回答

1

是的,你想要的是非常可能的,你需要的是一個只有地圖的工作。即只有一個映射器但不是還原器的工作。

您可以通過在驅動程序類中將減速器的數量設置爲0來實現它。

job.setNumReduceTasks(0); 

一個有關這個主題的更詳細的博客可以發現here

要生成每個輸入行文件考慮直接使用HDFS API從您的映射,即FileSystemFileStatus

+0

但如何,我假設創建多個輸出文件,因爲我想將每行寫入新文件。我不想執行任何分類操作。我正在使用'LazyOutputFormat' ... –

+0

爲什麼你有這樣的要求?,考慮直接從你的映射器使用hdfs api,即[FileSystem](http://hadoop.apache.org/docs/r2.2.0/api /org/apache/hadoop/fs/FileSystem.html)和[FileStatus](http://hadoop.apache.org/docs/r2.2.0/api/org/apache/hadoop/fs/FileStatus.html) – Sudarshan

+0

I我在映射器中寫入文件,因爲我在reducer中遇到了一些問題,它在一些迭代後停止(即當輸入文件的行數大於2000時),並且它不會創建任何輸出文件... –