【发布时间】:2020-06-25 21:20:25
【问题描述】:
我正在使用火花 2.4.0 我在使用 count 函数进行聚合时观察到一种奇怪的行为。
from pyspark.sql import functions as F
tst=sqlContext.createDataFrame([(1,2),(1,5),(2,None),(2,3),(3,None),(3,None)],schema=['col1','col2'])
tst.show()
+----+----+
|col1|col2|
+----+----+
| 1| 2|
| 1| 5|
| 2|null|
| 2| 3|
| 3|null|
| 3|null|
+----+----+
tst.groupby('col1').agg(F.count('col2')).show()
+----+-----------+
|col1|count(col2)|
+----+-----------+
| 1| 2|
| 3| 0|
| 2| 1|
+----+-----------+
这里你可以看到空值没有被计算在内。我搜索了文档,但没有提到函数计数不计算空值。 更令我惊讶的是这个
tst.groupby('col1').agg(F.count(F.col('col2').isNull())).show()
+----+---------------------+
|col1|count((col2 IS NULL))|
+----+---------------------+
| 1| 2|
| 3| 2|
| 2| 2|
+----+---------------------+
在这里我完全糊涂了。当我使用 isNull() 时,它不应该只计算空值吗?为什么要计算所有值?
有什么我遗漏的吗?
【问题讨论】:
标签: pyspark apache-spark-sql pyspark-dataframes