使用mapReduce和hadoop提取包含特定值的行

时间:2016-05-03 12:39:40

标签: hadoop mapreduce feature-extraction

我是开发map-reduce功能的新手。考虑我有包含四列数据的 csv 文件。

例如:

101,87,65,67  
102,43,45,40  
103,23,56,34  
104,65,55,40  
105,87,96,40  

现在,我想要提取说

40 102  
40 104  
40 105  

因为这些行在第四列中包含 40

如何编写map reduce函数?

1 个答案:

答案 0 :(得分:4)

基本上WordCount示例非常类似于您要实现的目标。您应该有一个条件来检查标记化的String是否具有所需的值,并且仅在这种情况下您写入上下文,而不是初始化每个单词的计数。这将有效,因为Mapper将分别接收CSV的每一行。

现在,Reducer将收到已按键组织的值列表。在Reducer中,您可以使用NullWritable作为返回值类型,而不是将IntWritable作为输出值类型,因此您的代码只会输出键。此外,您不需要在Reducer中使用循环,因为您只想输出密钥。

我的答案中没有提供任何代码,因为你不会从中学到任何东西。从建议开始。

编辑:既然您已经修改了有关Reducer请求的问题,以下是一些如何实现您想要的提示。

获得所需结果的可能性之一是:在Mapper中,在分割(或tekenizing)行之后,您将上下文列3写为键,将列0写为值。您的Reducer,因为您不需要任何类型的聚合,可以简单地写出Mappers生成的键和值(是的,您的Reducer代码将以一行代码结束)。您可以查看我以前的answers之一,这里的图很好地解释了Map和Reduce阶段正在做什么。