我想计算分组 Spark 数据帧中的一列中有多少记录是真实的,但我不知道如何在 python 中做到这一点。例如,我有一个带有region
、salary
的数据和IsUnemployed
列,其中IsUnemployed
为布尔值。我想看看每个地区有多少失业者。 我知道我们可以做一个filter
然后groupby
但我想同时生成两个聚合,如下所示
from pyspark.sql import functions as F
data.groupby("Region").agg(F.avg("Salary"), F.count("IsUnemployed"))
可能最简单的解决方案是带有 SUM
的普通CAST
(C 样式,其中 TRUE
-> 1,FALSE
-> 0):
(data
.groupby("Region")
.agg(F.avg("Salary"), F.sum(F.col("IsUnemployed").cast("long"))))
更通用和惯用的解决方案是COUNT
CASE WHEN
:
(data
.groupby("Region")
.agg(
F.avg("Salary"),
F.count(F.when(F.col("IsUnemployed"), F.col("IsUnemployed")))))
但在这里,这显然是矫枉过正。