跳到主要内容

percentile:计算精确百分位数

速查结论

percentile(col, percentage [, frequency]) 是 Spark SQL 中用于计算数值列的精确百分位数值的函数。

语法

percentile(col, percentage [, frequency])
percentile(col, array(percentage1 [, percentage2]...) [, frequency])

参数说明

参数说明
col数值列或 ANSI 间隔列,要计算百分位数的目标列
percentage一个介于 0.0 和 1.0 之间的数值,或由这样的数值组成的数组
frequency可选正整数,表示每个值的频次权重

示例

> SELECT percentile(col, 0.3) FROM VALUES (0), (10) AS tab(col);
3.0
> SELECT percentile(col, array(0.25, 0.75)) FROM VALUES (0), (10) AS tab(col);
[2.5,7.5]
> SELECT percentile(col, 0.5) FROM VALUES (INTERVAL '0' MONTH), (INTERVAL '10' MONTH) AS tab(col);
0-5
> SELECT percentile(col, array(0.2, 0.5)) FROM VALUES (INTERVAL '0' SECOND), (INTERVAL '10' SECOND) AS tab(col);
[0 00:00:02.000000000,0 00:00:05.000000000]

常见报错与避坑指南

  • percentage 范围校验:percentage 的值必须在 0.0 到 1.0 之间(含边界),超出范围会直接报错。例如 0.5 表示第 50 百分位(中位数)。
  • frequency 必须为正整数:frequency 参数必须是正整数,传入 0 或负数会导致错误。
  • 精确计算 vs 近似计算percentile() 计算的是精确百分位数,可能消耗较多内存。若数据量极大且允许近似结果,考虑使用 percentile_approx()

Since: 2.1.0

📱关注公众号

「数据仓库技术」文章同步更新,不错过每一篇干货

微信公众号二维码
💬加群交流

备注「数据仓库技术」加入社群,每日一道大厂SQL真题

交流微信二维码

你可能还想看