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