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

PySpark列聚合统计疑问:均值等统计是否计入Null值?

Spark/PySpark聚合统计中Null值对统计量的影响

结论:Spark/PySpark中的avg、标准差(stddev/stddev_samp等)这类统计聚合函数,计算时会自动忽略Null值,分母仅统计非Null的有效数据量,不会将Null计入总数。

以你提供的COL列数据为例:

  • 非Null值总和:14.150919 + 1.278803 + 60.593151 + 2.393357 = 78.41623
  • 非Null值数量:4
  • 最终均值为 78.41623 / 4 = 19.6040575,和你假设的计算逻辑完全一致。

相关函数的行为说明

Spark的聚合统计函数遵循标准统计逻辑,Null代表缺失值而非0,因此不会纳入计算:

  • avg:计算逻辑为非Null值总和 / 非Null值数量
  • stddev/stddev_samp(样本标准差):基于非Null值的数量计算自由度(n-1)
  • stddev_pop(总体标准差):基于非Null值的总数(n)
  • count('COL'):统计非Null值的数量;count(*)才会统计所有行(包含Null)

验证代码

你可以运行以下代码验证上述结论:

import pyspark.sql.functions as F

# 构造示例数据
data = [
    (None,), (None,), (None,), (14.150919,), (1.278803,),
    (None,), (None,), (None,), (60.593151,), (None,),
    (2.393357,), (None,), (None,), (None,), (None,)
]
df = spark.createDataFrame(data, ["COL"])

# 计算均值、非Null数量、总行数
result = df.agg(
    F.avg('COL').alias('average'),
    F.count('COL').alias('non_null_count'),
    F.count('*').alias('total_rows')
).collect()[0]

print(f"均值: {result.average}")
print(f"非Null值数量: {result.non_null_count}")
print(f"总行数: {result.total_rows}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 10:45:48