【问题标题】:How to count a boolean in grouped Spark data frame如何计算分组 Spark 数据框中的布尔值
【发布时间】:2016-05-31 08:13:10
【问题描述】:

我想计算分组 Spark 数据帧的列中有多少条记录为真,但我不知道如何在 python 中执行此操作。例如,我有一个带有regionsalaryIsUnemployed 列的数据,其中IsUnemployed 作为布尔值。我想看看每个地区有多少失业者。我知道我们可以做一个filter 然后groupby 但我想同时生成两个聚合,如下所示

from pyspark.sql import functions as F  
data.groupby("Region").agg(F.avg("Salary"), F.count("IsUnemployed")) 

【问题讨论】:

    标签: python sql apache-spark pyspark apache-spark-sql


    【解决方案1】:

    可能最简单的解决方案是简单的CAST(C 风格,其中TRUE -> 1,FALSE -> 0)和SUM

    (data
        .groupby("Region")
        .agg(F.avg("Salary"), F.sum(F.col("IsUnemployed").cast("long"))))
    

    更通用和惯用的解决方案是CASE WHENCOUNT

    (data
        .groupby("Region")
        .agg(
            F.avg("Salary"),
            F.count(F.when(F.col("IsUnemployed"), F.col("IsUnemployed")))))
    

    但这里显然是矫枉过正。

    【讨论】:

    • 第二种方法运行速度是否较慢,或者 Catalyst 是否将两者优化为大致相似的字节码?
    猜你喜欢
    • 2018-03-05
    • 1970-01-01
    • 1970-01-01
    • 2011-11-03
    • 1970-01-01
    • 1970-01-01
    • 2013-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多