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

mtb9vblg  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(490)

我对开发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函数?

yiytaume

yiytaume1#

基本上,wordcount示例非常类似于您要实现的目标。与初始化每个单词的计数不同,您应该有一个条件来检查标记化字符串是否具有所需的值,并且只有在这种情况下才写入上下文。这将起作用,因为Map器将分别接收csv的每一行。
现在reducer将接收值列表,这些值已按键组织。在reducer中,可以使用nullwritable作为返回值类型,而不是将intwritable作为输出值类型,因此代码将只输出键。另外,你不需要在减速机的周期,因为你只想输出的关键。
我不提供你任何代码在我的答案,因为你会学到什么。让你远离推荐。
编辑:因为你修改了你的问题,要求减速机,这里有一些技巧,你可以实现你想要的。
实现所需结果的一种可能性是:在mapper中,在拆分(或将行标记化)行之后,将列3作为键写入上下文,将列0作为值写入上下文。因为您不需要任何类型的聚合,所以您的reducer可以简单地编写Map程序生成的键和值(是的,您的reducer代码将以一行代码结束)。你可以查看我之前的一个答案,那里的图很好地解释了map和reduce阶段在做什么。

相关问题