Hadoop Hive中的自定义计算

Hadoop Hive中的自定义计算,hadoop,hive,bigdata,Hadoop,Hive,Bigdata,我的配置单元表中有以下数据 A B C D E 1 prashant 11980 1000 -50 25 2 siva 11980 1500 -25 20 3 prateek 11980 1200 -20 70 4 rahul 12001 2000 -80 20 5 rajesh 12202 2100 -25 10 6

我的配置单元表中有以下数据

    A           B       C       D   E
1   prashant   11980   1000   -50   25
2   siva       11980   1500   -25   20
3   prateek    11980   1200   -20   70
4   rahul      12001   2000   -80   20
5   rajesh     12202   2100   -25   10
6   ankit      12201   1700   -70   20
7   alok       12203   4000   -30   100
我需要通过一些计算(如下所示)将数据从这个表传输到另一个配置单元表。如您所见,它有一个额外的列,该列应根据所述计算获取数据。基本上,这个概念是——将一行中的计算输出作为下一行的输入,依此类推

    A           B       C       D   E   F
1   prashant   11980   1000   -50   25  E1-D1
2   siva       11980   1500   -25   20  F1-D2
3   prateek    11980   1200   -20   70  F2-D3
4   rahul      12001   2000   -80   20  F3-D4
5   rajesh     12202   2100   -25   10  F4-D5
6   ankit      12201   1700   -70   20  F5-D6
7   alok       12203   4000   -30   100 F6-D7
我尝试为此编写一个UDAF,但似乎不起作用,因为我看不到任何方法在迭代到下一行时获取最后一行值,并且不确定terminatePartial()和merge()函数在多个映射任务的情况下如何工作

卡在这一点上

我还想过将数据放到一个文本文件中,然后在上面运行mapreduce作业,但这有点复杂,因为在执行多个map任务的情况下,计算会混淆


不确定在hadoop中如何实现。任何建议都会有很大帮助。

生成F列的规则是什么,它是否只取决于采样线的值?@loolo是的,它只取决于采样线的值。规则是-减去E和D中的值,并将其放入F中作为第一行。然后从第一行获取F的这个值,并将其作为输入传递到下一行,然后将其F列值计算为->(最后一行的F值-当前行的D值),依此类推。然后将其作为输入传递到下一行,这意味着它不仅仅依赖于同一行。在这种情况下,不适合用分布式的方法求解。有没有可能让它只依赖于同一行的值呢?@罗洛是的,这就是问题所在。它不依赖于同一行,而是从上一行获取值。你们有什么想法可以在hive或mapreduce中实现吗?对我来说,MR的优势在于并行地完成这项工作。在您的情况下,每个作业都依赖于上一个作业,这意味着这只能在一个映射器内完成。使用
hadoop
绝对不合适。Hive只是hadoop的包装器,这意味着Hive也不适合这个糟糕的规则。如果可能的话,改变你的规则。