2017-09-18 1 views
1

J'ai une trame de données d'allumage qui est regroupé ba une Colum agrégée avec un compte. df.groupBy ('a) .agg (nombre ("a")) montrentétincelle dataframe groupping ne compte pas les valeurs NULL

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


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

retours

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

qui montre clairement que les valeurs nulles ne sont pas comptées initialement.

Quelle est la cause de ce comportement? Je me serais attendu (si null est contenue dans le résultat du regroupement) pour voir correctement les comptes.

Répondre

4

Oui, count appliqué à une colonne spécifique ne compte pas les valeurs nulles. Si vous souhaitez inclure les null valeurs, utilisez:

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

Quelle est la raison de ce comportement?

Norme SQL-92. In particular (Souligné par l'auteur):

Soit T l'argument ou un argument source d'une spécification de la fonction < set>.

Si COUNT (*) est spécifiée, le résultat est la cardinalité de T.

Sinon, laissez-TX être la table une seule colonne qui est la résultat de l'application de l'expression valeur <> à chaque ligne de T et en éliminant les valeurs nulles.

Si DISTINCT est spécifié, puis laissez TXA être le résultat d'éliminer les valeurs en double redondantes de TX. Sinon, laissez TXA être TX.

Si le nombre est spécifié, le résultat est la cardinalité de TXA.