Dataframe PySpark数据帧聚合中包含null的计数

Dataframe PySpark数据帧聚合中包含null的计数,dataframe,pyspark,Dataframe,Pyspark,我正在尝试使用agg和count获取数据帧上的一些计数 from pyspark.sql import Row ,functions as F row = Row("Cat","Date") df = (sc.parallelize ([ row("A",'2017-03-03'), row('A',None), row('B','2017-03-04'), row('B','Garbage'), row('A'

我正在尝试使用agg和count获取数据帧上的一些计数

from pyspark.sql import Row ,functions as F
row = Row("Cat","Date")
df = (sc.parallelize
  ([
        row("A",'2017-03-03'),
        row('A',None),
        row('B','2017-03-04'),
        row('B','Garbage'),
        row('A','2016-03-04')
]).toDF())
df = df.withColumn("Casted", df['Date'].cast('date'))
df.show()

)

函数F.count()只提供非空计数。除了使用“或”条件外,是否有其他方法获取包含空值的计数

无效计数似乎不起作用。&条件看起来没有按预期工作

(
 df
 .groupby(df['Cat'])
.agg
 (
  F.count('*').alias('count'),    
  F.count('Date').alias('Date_Count'),
  F.count('Casted').alias('Valid_Date_Count'),
  F.count(col('Date').isNotNull() & col('Casted').isNull()).alias('invalid')
 )    
.show()
)

将布尔表达式强制转换为
int
sum
it

df\
.groupby(df['Cat']))\
.agg(
F.count('Date')。别名('Date\u count'),
F.count('Casted')。别名('Valid_Date_count'),
F.sum(~F.isnull('Date')&F.isnull('Casted')).cast('int')).alias(“无效的日期”)
).show()
+---+----------+----------------+------------------+
|类别|日期|计数|有效|日期|计数|无效|日期||
+---+----------+----------------+------------------+
|B | 2 | 1 | 1|
|A | 2 | 2 | 0|
+---+----------+----------------+------------------+

您能看看我添加的最后一个代码块吗。无效的别名没有给出预期的结果。@Tronald Dump预期的输出是什么预期的输出将添加到文章的末尾。现在,您必须对表达式求和
(
 df
 .groupby(df['Cat'])
.agg
 (
  F.count('*').alias('count'),    
  F.count('Date').alias('Date_Count'),
  F.count('Casted').alias('Valid_Date_Count'),
  F.count(col('Date').isNotNull() & col('Casted').isNull()).alias('invalid')
 )    
.show()
)