【发布时间】:2021-11-11 07:36:06
【问题描述】:
我有一个 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 中的方法exprs2 = [countDistinct(x) for x in count_cols],但是当我只为聚合列尝试AssertionError: all exprs should be Column 时收到错误消息。
如何在一个聚合中结合 sum 和 count distinct?我知道,我可以用sum 列和countDistinct 列做一次,然后加入两个数据框,但应该有一个解决方案可以一步完成...
【问题讨论】:
标签: python pyspark group-by aggregate-functions distinct