我有一个非常简单的数据框
df = spark.createDataFrame([(None,1,3),(2,1,3),(2,1,3)], ['a','b','c'])
+----+---+---+
| a| b| c|
+----+---+---+
|null| 1| 3|
| 2| 1| 3|
| 2| 1| 3|
+----+---+---+
当我在此数据框上应用countDistinct
时,根据方法会发现不同的结果:
df.distinct().count()
2
结果我除外,最后两行是相同的,但第一行与另外两行不同(因为空值)
import pyspark.sql.functions as F
df.agg(F.countDistinct("a","b","c")).show()
1
似乎F.countDistinct
处理null
值的方式对我来说并不直观。
它看起来像是一个错误或正常吗?如果这是正常的,我怎么能写出与第一种方法完全相同但又与第二种方法相同的精神。
答案 0 :(得分:4)
countDistinct
的工作方式与Hive count(DISTINCT expr[, expr])
相同:
count(DISTINCT expr [,expr]) - 返回提供的表达式唯一且非NULL的行数。
第一行不包括在内。这对于SQL函数来说很常见。