【问题标题】:Pyspark - Groupby and collect list over multiple columns and create multiple columnsPyspark - Groupby 并收集多列列表并创建多列
【发布时间】:2020-10-01 00:19:30
【问题描述】:

我有以下数据框,我正在尝试对其进行分组和聚合数据。

Column_1 Column_2 Column_3
A        N1       P1
A        N2       P2
A        N3       P3
B        N1       P1
C        N1       P1
C        N2       P2

所需输出:

Column_1 Column_2 Column_3
A        N1,N2,N3 P1,P2,P3
B        N1       P1
C        N1,N2    P1,P2

我可以通过使用 partition 和 groupby 创建一个窗口来处理一列。 然后我在窗口上使用收集列表和分组并聚合以获取一列。这适用于一列。

如何在 2 列中执行相同的操作。请帮忙

【问题讨论】:

    标签: python dataframe apache-spark pyspark


    【解决方案1】:

    group byagg 函数可以采用多个聚合函数。可以加两次collect_list

    df.groupby('Column_1').agg(F.collect_list('Column_2'), F.collect_list('Column_3')).orderBy('Column_1').show()
    

    打印

    +--------+----------------------+----------------------+
    |Column_1|collect_list(Column_2)|collect_list(Column_3)|
    +--------+----------------------+----------------------+
    |       A|          [N1, N2, N3]|          [P1, P2, P3]|
    |       B|                  [N1]|                  [P1]|
    |       C|              [N1, N2]|              [P1, P2]|
    +--------+----------------------+----------------------+
    

    对于简单的分组,不需要使用Window

    【讨论】:

    • 按预期工作。是否有链接或文章明确说明我们必须使用窗口的场景?以及我们可以像上面那样使用 groupby 的地方。对学习会有帮助。谢谢。
    • 也许this link 有帮助。根据经验,当我希望操作后的行数保持不变时,我会使用 windows,如果我希望结果中的行数低于原始数据集中的行数,我会使用 groupBy。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-06
    • 2021-10-09
    • 2019-10-12
    • 1970-01-01
    • 2021-09-27
    • 2019-12-26
    • 2021-04-01
    相关资源
    最近更新 更多