我有一个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
这清楚地表明最初没有计算空值。
这种行为的原因是什么?我希望(如果null
at全部包含在分组结果中)以正确查看计数。
是的,应用于特定列的count
不计算空值。如果要包含空值,请使用:
df.groupBy('a).agg(count("*")).show
这种行为的原因是什么?
SQL-92标准。 In particular(强调我的):
设T是<set function specification>的参数或参数源。
如果指定COUNT(*),则结果是T的基数。
否则,让TX成为单列表,它是将<value expression>应用于T的每一行并消除空值的结果。
如果指定了DISTINCT,则让TXA成为从TX中消除冗余重复值的结果。否则,让TXA成为TX。
如果指定了COUNT,则结果是TXA的基数。