hive sql计算分位数 出现重复数据的处理逻辑

本文探讨了HiveSQL中计算百分位数的PERCENTILE_APPROX函数的工作原理,通过一个具体的数列示例,解释了在遇到重复数据时该函数如何确定分位点。当计算0.8分位数时,发现小于等于阈值的数比例不足80%,原因是函数将重复数据视为一个整体。这一发现揭示了函数在处理重复值时的逻辑,对于正确理解和使用此函数至关重要。
摘要由CSDN通过智能技术生成

哎呀妈呀,我说这数据奇奇怪怪,看了一上午终于明白了!

我现在要计算百分位数的的真实数据是这样的:
【1X277,3X43,5X10,9X41,15X10,25X6,27X3,45X1】
AXB表示数列中A有B个

然后我使用上一篇文章提到的PERCENTILE_APPROX函数计算0.8分位数thr,用thr作为阈值对数据分组,奇怪的是,小于等于thr的数竟然不到80%,按正常逻辑来想的话,应该大于80%才对,因为可能有多个值都等于thr,总之,至少不能少于80%。

于是,开始探索。。

我发现当计算分位数的数列里出现重复数据时,hive sql里PERCENTILE_APPROX的计算逻辑是这样的:
以上面的数列为例

  • 计算分位点数位置:391*0.8=312.8
  • 计算分位点数:1+(3-1)*(312.8-277)/43=2.6651

他是会把重复数当做一个数来计算分位数和上下紧邻值的距离,而不是按我之前以为的“数据按从小到大排,312和313都是3,分位点数就是3”。这样也解释了为什么按这个阈值划分后,小于等于thr的数不到80%。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值