Spark SQL 2.4.1(Java8):GroupBy统计包含空值/空字段的计数方法
解决Spark SQL GroupBy时统计包含空字段的总记录数问题
你碰到的这个情况是Spark SQL里count()函数的特性导致的——count(col)只会统计该字段不为null的记录数,所以空字段被排除了。要把空字段纳入统计,有两种简单可靠的修改方式,在Spark 2.4.1版本(搭配Java8)里都完全适用:
方法1:使用count(*)统计所有行数
count(*)是统计分组内的全部记录数,不管任何字段是否为null,正好符合你的需求。修改后的SQL语句如下:
count(*) as total_count, avg(col) as mean group by col(year)
方法2:使用count(1)(效果等同于count(*))
count(1)里的1是一个常量值,每条记录都会被计数,同样不会忽略null字段。写法如下:
count(1) as total_count, avg(col) as mean group by col(year)
补充说明
为什么原来的count(col)不行?因为Spark SQL的count(expr)逻辑是:只有当expr的结果不为null时,才会将这条记录计入统计。而count(*)和count(1)是直接统计分组内的行数,不依赖任何字段的取值,所以能包含所有记录,包括字段为空的情况。
内容的提问来源于stack exchange,提问作者BdEngineer
相关产品推荐
相关产品推荐

