百分位数

返回数值列 expr 的精确百分位数(s),其值为 [0.0, 1.0]。

Syntax

from pyspark.sql import functions as sf

sf.percentile(col, percentage, frequency=1)

参数

参数 类型 Description
col pyspark.sql.Column 或 str 数值列。
percentage pyspark.sql.Column浮点数、浮点数列表或浮点数元组 十进制中的百分比(必须介于 0.0 和 1.0 之间)。
frequency pyspark.sql.Column 或 int 控制频率的正数值文本(默认值:1)。

退货

pyspark.sql.Column:数值列的确切 percentile 值。

例子

示例 1:计算多个百分位

from pyspark.sql import functions as sf
key = (sf.col("id") % 3).alias("key")
value = (sf.randn(42) + key * 10).alias("value")
df = spark.range(0, 1000, 1, 1).select(key, value)
df.select(
    sf.percentile("value", [0.25, 0.5, 0.75], sf.lit(1))
).show(truncate=False)
+--------------------------------------------------------+
|percentile(value, array(0.25, 0.5, 0.75), 1)            |
+--------------------------------------------------------+
|[0.7441991494121..., 9.9900713756..., 19.33740203080...]|
+--------------------------------------------------------+

示例 2:按组计算百分位数

from pyspark.sql import functions as sf
key = (sf.col("id") % 3).alias("key")
value = (sf.randn(42) + key * 10).alias("value")
df = spark.range(0, 1000, 1, 1).select(key, value)
df.groupBy("key").agg(
    sf.percentile("value", sf.lit(0.5), sf.lit(1))
).sort("key").show()
+---+-------------------------+
|key|percentile(value, 0.5, 1)|
+---+-------------------------+
|  0|     -0.03449962216667...|
|  1|        9.990389751837...|
|  2|       19.967859769284...|
+---+-------------------------+