2017-09-18 46 views
1

我有被分组BA与计数聚集一科拉姆火花数据帧: df.groupBy('一).agg(数( “A”))显示火花数据框中groupping不计空

+---------+----------------+ 
|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完全包含在分组结果中)以正确查看计数。

回答

4

是的,应用于特定列的count不计算空值。如果您希望包括空值,使用:

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

什么是这种现象的原因?

SQL-92标准。 In particular(重点是我的):

设T为<集函数规范>的参数或参数源。

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

否则,设TX是单柱表是将值表达式应用于T 的每一行并消除空值的结果。

如果指定DISTINCT,然后让TXA是从TX消除冗余重复值的结果。否则,让TXA为 TX。

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