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



我的 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

类型为DOUBLE_TYPE。我想计算中位数。我希望答案是 0.008032129,因为这是对我的数字进行排序的第 7 个观察结果。

当我运行此代码时(如此处建议如何在 Hive 中计算中位数(:

select percentile_approx(Numbers, 0.5) AS Numbers
from tryout1

我得到的答案是:0.0040160642570281121。这是出乎意料的,甚至不是我列表中的一个数字!有谁知道为什么Hive给我这个数字,以及我应该修复什么才能使其工作?如果您知道一种完全不同的计算中位数的方法,我也非常感兴趣!

事实上,Hive 中percentile_approx的功能表现不佳。感谢丽莎得到一个大概的答案:

从我的试用中:

select percentile_approx(numbers , 0.5 , 10 ) as A_mdn from tryout1 ;
-0.007249852187499999

从丽莎:

select (percentile(cast((numbers*1000000) as BIGINT), 0.5))/1000000 as A_mdn from tryout1;
0.008032

您可以使用百分位数函数来计算中位数,并尝试将整个列转换为 int 或 BIGINT,看看您是否接近答案。试试这个:

select percentile(cast(g_rek_brutowinst as BIGINT), 0.5) AS g_rek_brutowinst from tryout1

最新更新