计算一个 DataFrame数值列的近似四分位数。
此算法的结果具有以下确定性边界:如果DataFrame具有 N 个元素,并且如果我们请求概率perr为误差的分位,则该算法将返回一个样本x,DataFrame以便确切的x排名接近 (p _ N)。 更确切地说, floor((p - err) _ N) <= rank(x) <= ceil((p + err) \* N).
此方法通过一些速度优化实现 Greenwald-Khanna 算法的变体。
Syntax
approxQuantile(col, probabilities, relativeError)
参数
| 参数 | 类型 | 说明 |
|---|---|---|
col |
str、list 或 tuple | 单个列名或多个列的名称列表。 |
probabilities |
浮点列表或元组 | 分位概率列表。 每个数字必须是 [0, 1] 范围内的浮点数。 例如,0.0 是最小值,0.5 是中值,1.0 是最大值。 |
relativeError |
float | 要实现的相对目标精度(>= 0)。 如果设置为零,将计算确切的分量,这可能非常昂贵。 大于 1 的值给出的结果与 1 相同。 |
退货
list
如果 col 为字符串,则返回浮点列表。 如果 col 为字符串的列表或元组,则返回浮点列表的列表。
备注
在计算之前,数值列中将忽略 Null 值。 对于仅包含 null 值的列,将返回空列表。
示例
计算单个列的分量。
data = [(1,), (2,), (3,), (4,), (5,)]
df = spark.createDataFrame(data, ["values"])
df.stat.approxQuantile("values", [0.0, 0.5, 1.0], 0.05)
# [1.0, 3.0, 5.0]
计算多个列的分量。
data = [(1, 10), (2, 20), (3, 30), (4, 40), (5, 50)]
df = spark.createDataFrame(data, ["col1", "col2"])
df.stat.approxQuantile(["col1", "col2"], [0.0, 0.5, 1.0], 0.05)
# [[1.0, 3.0, 5.0], [10.0, 30.0, 50.0]]
处理 null 值。
data = [(1,), (None,), (3,), (4,), (None,)]
df = spark.createDataFrame(data, ["values"])
df.stat.approxQuantile("values", [0.0, 0.5, 1.0], 0.05)
# [1.0, 3.0, 4.0]