>我正在尝试在 spark-SQL 中使用百分位数函数。
数据:
col1
----
198
15.8
198
198
198
198
198
198
198
198
198
如果我使用下面的代码,我得到的百分位数值是不正确的。
select percentile('col1', .05) from tblname
输出: 106,9
如果我使用下面的代码,我得到的百分位数值是不正确的。
select percentile('col1', .05, 2) from tblname
输出: 24.91000000000001
但是如果我使用以下代码,我会得到预期的回复(但我不知道为什么以及如何)
select percentile('col1', .05, 100) from tblname
输出: 15,8
谁能帮助我理解最后一个论点如何改变事情?任何文档?我查看了火花源代码文档字符串(因为我不知道 scala),但没有运气。官方网站上也没有。
百分位数(列、百分比 [、频率])- 返回给定百分比下数字列列的确切百分位值>。百分比值必须> 0.0 和 1.0 之间。频率值应为正积分
链接
frequency 参数指定应计算元素的次数,因此当您指定频率 100 时,每个元素将计数 100 次。
这允许每个不同的百分位值具有可以映射到的特定项,从而消除了插值的需要。
请注意,您始终可以找到一个会导致插值的百分位数,从而为您提供不正确的值。 例如,在您的情况下,尝试获得百分位数 0.0901,即 9.01 百分位数。