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

Extracting rows containing specific value using mapReduce and hadoop

我是开发 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函数怎么写?

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

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

我没有在我的回答中为您提供任何代码,因为您不会从中学到任何东西。让你远离推荐。

编辑:由于您修改了请求 Reducer 的问题,这里有一些技巧可以帮助您实现所需。

实现预期结果的一种可能性是:在 Mapper 中,拆分(或分词)行后,您将上下文第 3 列作为键写入,将第 0 列作为值写入。由于您不需要任何类型的聚合,您的 Reducer 可以简单地编写映射器生成的键和值(是的,您的 Reducer 代码将以一行代码结束)。你可以查看我之前的一篇 answers,那里的图很好地解释了 Map 和 Reduce 阶段在做什么。