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
相关产品推荐
相关产品推荐

