spark数据帧分组不计算空值

问题描述 投票:1回答:2

我有一个spark DataFrame,它按聚合计数的列分组:

df.groupBy('a').agg(count("a")).show

+---------+----------------+
|a        |count(a)        |
+---------+----------------+
|     null|               0|
|      -90|           45684|
+---------+----------------+


df.select('a').filter('aisNull').count

回报

warning: there was one feature warning; re-run with -feature for details
res9: Long = 26834

这清楚地表明最初没有计算空值。

这种行为的原因是什么?我希望(如果nullat全部包含在分组结果中)以正确查看计数。

sql apache-spark group-by null apache-spark-sql
2个回答
5
投票

是的,应用于特定列的count不计算空值。如果要包含空值,请使用:

df.groupBy('a).agg(count("*")).show

2
投票

这种行为的原因是什么?

SQL-92标准。 In particular(强调我的):

设T是<set function specification>的参数或参数源。

如果指定COUNT(*),则结果是T的基数。

否则,让TX成为单列表,它是将<value expression>应用于T的每一行并消除空值的结果。

如果指定了DISTINCT,则让TXA成为从TX中消除冗余重复值的结果。否则,让TXA成为TX。

如果指定了COUNT,则结果是TXA的基数。

© www.soinside.com 2019 - 2024. All rights reserved.