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