带有 spark 数据框的空值和 countDistinct

null value and countDistinct with spark dataframe

我有一个非常简单的数据框

  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 值的方式对我来说并不直观。

您觉得它是错误还是正常?如果它是正常的,我怎么能写出一些东西来输出第一种方法的结果,但与第二种方法的精神相同。

countDistinctHive count(DISTINCT expr[, expr]):

的工作方式相同

count(DISTINCT expr[, expr]) - Returns the number of rows for which the supplied expression(s) are unique and non-NULL.

不包括第一行。这对于 SQL 函数很常见。