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

PySpark DataFrame非空列计数方法及新增sum列实现

嘿,这两个PySpark的需求我熟,给你一步步讲清楚~

1. 统计PySpark DataFrame中包含非空数据的列的数量

要统计有非空值的列数,核心思路是先检查每一列是否存在至少一个非空数据,再统计符合条件的列的总数。

首先导入PySpark的函数模块:

from pyspark.sql import functions as F

然后用下面的代码就能快速得到结果:

# 遍历所有列,统计每列非空行数,判断是否大于0,最后求和
non_empty_col_count = sum(1 for col_name in df.columns if df.select(F.count(col_name)).collect()[0][0] > 0)
print(f"包含非空数据的列数量: {non_empty_col_count}")

简单解释下:

  • F.count(col_name)会精准统计该列的非空行数(NULL值会被排除)
  • collect()[0][0]取出统计结果的具体数值
  • 只要某列的非空行数大于0,就把它算入统计总数,最后用sum得到最终的列数
2. 新增sum列计算每行非空列的数量

这个需求需要对每行的所有列做非空判断,然后累加符合条件的列数,直接用when和sum组合就能实现。

同样先确保导入了functions模块,然后执行以下代码:

# 为每个列生成非空判断表达式:非空返回1,空返回0
non_empty_exprs = [F.when(F.col(c).isNotNull(), 1).otherwise(0) for c in df.columns]

# 新增sum列,对所有表达式的结果求和
df_with_sum = df.withColumn("sum", F.sum(*non_empty_exprs))

# 查看结果
df_with_sum.show()

这里的逻辑很清晰:

  • 遍历DataFrame的所有列,用F.when判断每个列是否非空,返回1或0
  • 再用F.sum把每行的这些1和0加起来,得到的就是该行非空列的数量
  • 不管你的DataFrame是7列还是更多列,这个方法都通用,不用手动一个个列去写

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 10:32:43