【问题标题】:spark dataframe groupping does not count nulls火花数据框分组不计算空值
【发布时间】:2017-09-18 09:43:16
【问题描述】:

我有一个 spark DataFrame,它按一个按计数聚合的列分组:

df.groupBy('a').agg(count("a")).show

+---------+----------------+
|a        |count(a)        |
+---------+----------------+
|     null|               0|
|      -90|           45684|
+---------+----------------+


df.select('a').filter('aisNull').count

返回

warning: there was one feature warning; re-run with -feature for details
res9: Long = 26834

这清楚地表明最初没有计算空值。

这种行为的原因是什么?我本来希望(如果 nullat all 包含在分组结果中)正确地看到计数。

【问题讨论】:

    标签: sql apache-spark group-by null apache-spark-sql


    【解决方案1】:

    是的,count 应用于特定列不计算空值。如果要包含空值,请使用:

    df.groupBy('a).agg(count("*")).show
    

    【讨论】:

      【解决方案2】:

      这种行为的原因是什么?

      SQL-92 标准。 In particular(强调我的):

      令 T 为 的参数或参数源。

      如果指定了 COUNT(*),则结果是 T 的基数。

      否则,令 TX 为单列表,它是将 应用于 T 的每一行 并消除空值

      如果指定了 DISTINCT,则令 TXA 为从 TX 中消除冗余重复值的结果。否则,令 TXA 为 德克萨斯州。

      如果指定了 COUNT,则 结果是 TXA 的基数。

      【讨论】:

        【解决方案3】:

        value_counts(dropna=False) pyspark 的等价物:

        from pyspark.sql import functions as f
        df.groupBy('a').agg(f.count('*')).orderBy('count(1)',ascending=False).show()
        

        【讨论】:

        • 这与接受的答案非常相似。请详细解释看似简单的差异所产生的相关差异。
        猜你喜欢
        • 2018-07-13
        • 1970-01-01
        • 2018-02-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-15
        • 1970-01-01
        • 2022-08-05
        相关资源
        最近更新 更多