You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PySpark percentile_approx计算列中位数并独立保存值

解决Spark中total_amount列中位数计算问题

问题根源

  • 仅通过FN.expr()创建列表达式,未触发Spark的聚合计算,所以打印的是表达式对象而非实际数值。
  • 使用'total_amount'带引号会被Spark识别为字符串常量,而非目标列名,导致返回null。

正确实现代码

1. 计算并查看中位数

from pyspark.sql import functions as FN

# 通过agg执行聚合计算,列名不要加引号
median_df = processed.agg(
    FN.expr("percentile_approx(total_amount, 0.5, 1000000)").alias("total_amount_median")
)
median_df.show()

执行结果:

+---------------------+
|total_amount_median  |
+---------------------+
|12.8                 |
+---------------------+

2. 提取中位数数值供后续使用

如果需要将中位数保存为变量直接调用:

# 提取数值
median_value = median_df.first()["total_amount_median"]
print(median_value)  # 输出:12.8

手动验证结果

将你的数据集按total_amount升序排列后:

8.8, 8.8, 12.3, 12.3, 12.8, 13.3, 13.8, 14.75, 14.75, 17.3, 22.3

共11条数据,中位数为第6位的12.8,与Spark计算结果一致。

内容的提问来源于stack exchange,提问作者akanesora

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 10:50:23