【问题标题】:null value and countDistinct with spark dataframe带有火花数据框的空值和countDistinct
【发布时间】:2016-10-31 23:34:04
【问题描述】:

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

  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

这是我的结果,除了最后 2 行相同,但第一行与其他 2 行不同(因为 null 值)

第二种方法

  import pyspark.sql.functions as F
  df.agg(F.countDistinct("a","b","c")).show()

1

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

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

【问题讨论】:

    标签: apache-spark pyspark pyspark-sql


    【解决方案1】:

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

    count(DISTINCT expr[, expr]) - 返回提供的表达式唯一且非 NULL 的行数。

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

    【讨论】:

    • 那么如何将 NULL 计为不同的值呢?
    • @xiaodai df.select('a').distinct().count() 将在计数中包含 NULL 行,但在运行多列时不是最高性能
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-06
    • 2018-07-13
    • 2018-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多