我是Hive的新手,我将为编写加权因子计算的UDF函数提供帮助。

计算似乎很简单。

我有一张表,其中某些值 KEY,VALUE按GROUP_ID 分组。对于一组的每一行,我要计算加权因子,它是介于0和1之间的浮点数,它是组中该元素的权重。
该组的加权因子之和必须为1。

在此示例中,值是距离,然后权重与距离成反比。

GROUP_ID | KEY     | VALUE(DISTANCE)
====================================
1          10        4
1          11        3
1          12        2
2          13        1
2          14        5
3          ..        ..
...

数学函数:从k = 1到N的1 /(Xi * sum(1 / Xk))
GROUP_ID | KEY |   VALUE    | WEIGHTING_FACTOR
=======================================================
1          10      4        1/(4*(1/4+1/3+1/2)) = 0.23
1          11      3        1/(3*(1/4+1/3+1/2)) = 0.31
1          12      2        1/(2*(1/4+1/3+1/2)) = 0.46
2          13      1        1/(1*(1/1+1/5)) = 0.83
2          14      5        1/(5*(1/1+1+5)) = 0.17
3          ..      ..
...

您对使用UDF,UDAF或UDTF函数有何建议?

也许我必须使用“转换”?
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Transform

最佳答案

使用窗口和分析功能解决

http://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.0.0.2/ds_Hive/language_manual/ptf-window.html

资料来源:https://stackoverflow.com/a/18919834/2568351

关于java - 使用Hive UDF计算权重因子,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21724818/

10-12 22:52