我在计算Hive的中位数时出错了

时间:2018-03-01 08:43:58

标签: sql hive

我的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给了我这个号码,以及我应该修复它以使它工作?如果你知道一种完全不同的计算中位数的方法,我也很感兴趣!

2 个答案:

答案 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