Hadoop,如何规范化多列数据?

时间:2013-12-19 21:17:03

标签: hadoop mapreduce normalization

我有一个像这样的文件.txt

1036177 19459.7356 17380.3761 18084.1440

1045709 19674.2457 17694.8674 18700.0120

1140443 19772.0645 17760.0904 19456.7521

其中第一列表示Key,其他列表示值。 我想对每列进行标准化(最小 - 最大),然后对列进行总结。

有人可以就MapReduce中的方法给我一些建议吗?

1 个答案:

答案 0 :(得分:0)

从算法的角度来看,您需要:

  • 映射器
    • 通过它的分隔符(空格?)
    • 对每个输入行进行解析/标记
    • 使用Text对象封装关键字段
    • 创建自定义值类以封装其他字段或使用ArrayWritable包装器
    • 从Mapper输出此键/值
  • 减速
    • 所有值都将按相同的键进行分组,因此您只需要处理每个输入值并计算每列的最小值,最大值和总和
    • 最后输出结果

您可能希望使用Apache Pig,它可以使此任务更容易(未经测试):

grunt> A = LOAD '/path/to/data.txt' USING PigStorage(' ') 
           AS (key, fld1:float, fld2:float, fld3:float);
grunt> GRP = GROUP A BY key;
grunt> B = FOREACH GRP GENERATE $0, MIN(fld1), MAX(fld1), SUM(fld1), 
                                    MIN(fld2), MAX(fld2), SUM(fld2), 
                                    MIN(fld3), MAX(fld3), SUM(fld3);
grunt> STORE B INTO '/path/to/output' USING PigStorage('\t', '-schema');