2014-05-07 42 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时),并且它不会创建任何输出文件... –