我是开发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函数?
答案 0 :(得分:4)
基本上WordCount示例非常类似于您要实现的目标。您应该有一个条件来检查标记化的String是否具有所需的值,并且仅在这种情况下您写入上下文,而不是初始化每个单词的计数。这将有效,因为Mapper将分别接收CSV的每一行。
现在,Reducer将收到已按键组织的值列表。在Reducer中,您可以使用NullWritable作为返回值类型,而不是将IntWritable作为输出值类型,因此您的代码只会输出键。此外,您不需要在Reducer中使用循环,因为您只想输出密钥。
我的答案中没有提供任何代码,因为你不会从中学到任何东西。从建议开始。
编辑:既然您已经修改了有关Reducer请求的问题,以下是一些如何实现您想要的提示。
获得所需结果的可能性之一是:在Mapper中,在分割(或tekenizing)行之后,您将上下文列3写为键,将列0写为值。您的Reducer,因为您不需要任何类型的聚合,可以简单地写出Mappers生成的键和值(是的,您的Reducer代码将以一行代码结束)。您可以查看我以前的answers之一,这里的图很好地解释了Map和Reduce阶段正在做什么。