在Spark SQL的百分位数函数中使用频率参数



>我正在尝试在 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 百分位数。

最新更新