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

  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()



这是我的结果,除了最后两行是相同的,但第一行与其他两行是不同的(由于空值)

第二种方法
  import pyspark.sql.functions as F
  df.agg(F.countDistinct("a","b","c")).show()



看来F.countDistinct处理null值的方式对我来说并不直观。

对您来说,这看起来是错误还是正常?如果是正常的话,我该如何写出与第一种方法完全相同但与第二种方法相同的精神的输出结果。

最佳答案

countDistinctHive count(DISTINCT expr[, expr]) 的工作方式相同:



第一行不包括在内。这在SQL函数中很常见。

关于apache-spark - 空值和countDistinct与spark数据框,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40345117/

10-12 18:41