我的Hive表目前看起来像这样:
.ToArray()
类型为DOUBLE_TYPE。我想计算中位数。我希望答案是0.008032129,因为这是第7次观察我的数字。
当我运行此代码时(如How to calculate median in Hive所示):
Numbers
0
0
-0.12745098
-0.218905473
0.026011561
0.235294118
-0.028
-0.052356021
0.052753355
0.008032129
0.012768817
0.115384615
0.040816327
我得到的答案是:0.0040160642570281121。这是意料之外的,甚至不是我列表中的一个数字!有谁知道为什么Hive给了我这个号码,以及我应该修复它以使它工作?如果你知道一种完全不同的计算中位数的方法,我也很感兴趣!
答案 0 :(得分:1)
实际上,配置单元中的percentile_approx函数效果不佳。 感谢Liza获得一个大致的回答:
来自我的试验:
select percentile_approx(numbers , 0.5 , 10 ) as A_mdn from tryout1 ;
-0.007249852187499999
FROM LIZA:
select (percentile(cast((numbers*1000000) as BIGINT), 0.5))/1000000 as A_mdn from tryout1;
0.008032
答案 1 :(得分:0)
您可以使用百分位函数来计算中位数并尝试将完整列强制转换为int或BIGINT,看看您是否接近答案。试试这个:
select percentile(cast(g_rek_brutowinst as BIGINT), 0.5) AS g_rek_brutowinst from tryout1