gpt4 book ai didi

python - 在 PySpark 中的 groupby 之后计算 sum 和 countDistinct

转载 作者:行者123 更新时间:2023-12-05 09:30:55 25 4
gpt4 key购买 nike

我有一个 PySpark 数据框,我想对几列进行分组,然后计算一些列的总和并计算另一列的不同值。由于 countDistinct 不是内置的聚合函数,我不能使用像我在这里尝试的那样的简单表达式:

sum_cols = ['a', 'b']
count_cols = ['id']
exprs1 = {x: "sum" for x in sum_cols}
exprs2 = {x: "countDistinct" for x in count_cols}
exprs = {**exprs1, **exprs2}

df_aggregated = df.groupby('month','product').agg(exprs)

我还尝试了 this answer 中的方法as exprs2 = [countDistinct(x) for x in count_cols] 但当我尝试 AssertionError: all exprs should be Column 时收到错误消息聚合列。

我如何在一个聚合中合并求和和非重复计数?我知道,我可以用 sum 列做一次,用 countDistinct 列做一次,然后加入两个数据帧,但应该有一个解决方案可以一步完成...

最佳答案

不确定为什么必须使用 expr,但正常聚合应该有效。 countDistinct 是一个聚合函数。

(df
.groupBy('month','product')
.agg(
F.sum('a', 'b'),
F.countDistinct('id')
)
).show()

# +----+-----------+-------------+
# |name|sum(field1)|count(field1)|
# +----+-----------+-------------+
# | d| 0| 1|
# | c| 10| 1|
# | b| 5| 1|
# | a| 4| 1|
# +----+-----------+-------------+

关于python - 在 PySpark 中的 groupby 之后计算 sum 和 countDistinct,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69206227/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com