Hadoop映射器:行与文件

时间:2015-05-20 19:28:02

标签: java hadoop

我正在学习Hadoop / mapreduce,并对分割映射器的各种可能性提出疑问。

在标准' wordcount'场景,每个不同的过程在一个独特的行上工作,并做一些基本的数学(加法)。但是,是否可以让每个进程都在一个唯一的文件上工作?例如,如果我有500,000个唯一文件,每个文件大约是5M,我可以告诉Hadoop每个进程应该对每个文件执行一些分析,然后对结果分析执行统计(例如,将结果平均)吗? / p>

例如,假设每个文件包含:

{name}
{data1}
{data2}
...
{dataN}

我想对这个文件执行数学函数 F({name}) = [value1, value2, value3]基于{data1, ..., dataN},最后,我想找到每个[value1, value2, value3]的所有可能{name}数组的平均值。在这种情况下,如果我使用Hadoop处理每一行,它将无济于事,因为每个data必须与name相关联,所以我希望让Hadoop知道哪个{{1}它正在使用。

如果可以,name的计算是'地图'阶段,然后F数组的平均值为' reduce'相位θ

因此,要将问题合并为一个清晰的单行: 我怎样才能让Hadoop分解文件而不是行?

2 个答案:

答案 0 :(得分:1)

我们可以获取文件名并输出为mapper的输出键。映射器输出值可以是value1,value2,value3等值。获取文件名的代码段如下

InputSplit split = context.getInputSplit();
String fileName = split.getPath().getName();

在reducer部分,我们可以根据我们的文件名在这里进行迭代,并进行必要的操作,如平均值,总和等。 reducer输出可以包含文件名和值。

答案 1 :(得分:0)