使用 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 阶段在做什么。
我是开发 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 阶段在做什么。