如何使用Scala统计DataFrame中所有列的空值总数?
Scala中统计DataFrame各列空值总和的方法
对应Python里的Df.isnull().sum(),Scala可以通过Spark SQL的聚合函数组合实现,以下是两种常用写法:
方法一:生成包含各列空值数的DataFrame
这种方式和Python的输出格式最接近,会生成一个单行DataFrame,每列对应原DataFrame的空值统计结果:
import org.apache.spark.sql.functions._ // 假设你的DataFrame名为df val nullCountDF = df.agg( df.columns.map(colName => count(when(isNull(col(colName)), colName)).alias(s"${colName}_nulls")): _* ) // 查看结果 nullCountDF.show()
解释:
- 遍历DataFrame的所有列,对每一列用
isNull判断是否为空 - 用
when筛选出空值行,再通过count统计数量 - 为统计结果列添加
_nulls后缀,方便识别
方法二:转换为键值对Map(便于后续逻辑处理)
如果需要把统计结果转为Scala的Map结构,方便直接使用:
// 基于上面的nullCountDF获取Map val nullCountMap = nullCountDF.head().getValuesMap[Long](nullCountDF.columns) // 示例:打印某一列的空值数 println(s"列id的空值数:${nullCountMap("id_nulls")}")
内容的提问来源于stack exchange,提问作者unix.thula
相关产品推荐
相关产品推荐

