返回数值列的近似percentile值,该列col是有序col值(从最小到最大排序)中的最小值,这样值不超过percentagecol值或等于该值。
Syntax
from pyspark.sql import functions as sf
sf.approx_percentile(col, percentage, accuracy=10000)
参数
| 参数 | 类型 | Description |
|---|---|---|
col |
pyspark.sql.Column 或 str |
输入列。 |
percentage |
pyspark.sql.Column浮点数、浮点数列表或浮点数元组 |
十进制中的百分比(必须介于 0.0 和 1.0 之间)。 当百分比为数组时,每个值必须介于 0.0 和 1.0 之间。 |
accuracy |
pyspark.sql.Column 或 int |
一个正数值文本,用于控制内存成本的近似准确度。 较高的值可提高准确性。 1.0/准确性是相对错误(默认值:10000)。 |
退货
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.approx_percentile("value", [0.25, 0.5, 0.75], 1000000)
).show(truncate=False)
+----------------------------------------------------------+
|approx_percentile(value, array(0.25, 0.5, 0.75), 1000000) |
+----------------------------------------------------------+
|[0.7264430125286..., 9.98975299938..., 19.335304783039...]|
+----------------------------------------------------------+
示例 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.approx_percentile("value", sf.lit(0.5), sf.lit(1000000))
).sort("key").show()
+---+--------------------------------------+
|key|approx_percentile(value, 0.5, 1000000)|
+---+--------------------------------------+
| 0| -0.03519435193070...|
| 1| 9.990389751837...|
| 2| 19.967859769284...|
+---+--------------------------------------+