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

Hadoop,如何规范化多列数据?,hadoop,mapreduce,normalization,Hadoop,Mapreduce,Normalization,我有一个像这样的.txt文件 1036177 19459.7356 17380.3761 18084.1440 1045709 19674.245717694.8674 18700.0120 1140443 19772.0645 17760.0904 19456.7521 其中第一列表示键,其他列表示值。 我想规范化(最小-最大)每一列,然后总结列 有人可以就如何在MapReduce中实现这一点给我一些建议?从算法角度来看,您需要: 制图员 按输入行的分隔符(空格?)对其进行分析/标记 使用

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

1036177 19459.7356 17380.3761 18084.1440

1045709 19674.245717694.8674 18700.0120

1140443 19772.0645 17760.0904 19456.7521

其中第一列表示键,其他列表示值。 我想规范化(最小-最大)每一列,然后总结列


有人可以就如何在MapReduce中实现这一点给我一些建议?

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

  • 制图员
    • 按输入行的分隔符(空格?)对其进行分析/标记
    • 使用文本对象封装键字段
    • 创建自定义值类来封装其他字段,或者使用
      ArrayWritable
      包装器
    • 从映射器输出此键/值
  • 减速器
    • 所有值都将由同一个键分组,因此这里您只需要处理每个输入值,并计算每列的最小值、最大值和总和
    • 最后输出结果
您可能想看看如何使用ApachePig,这将使此任务更容易(未经测试):


非常感谢您的评论,非常有帮助!;)
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');