Pyspark - Groupby 并收集多列列表并创建多列

Pad*_*123 3 python dataframe apache-spark pyspark

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

Column_1 Column_2 Column_3
A        N1       P1
A        N2       P2
A        N3       P3
B        N1       P1
C        N1       P1
C        N2       P2
Run Code Online (Sandbox Code Playgroud)

所需输出:

Column_1 Column_2 Column_3
A        N1,N2,N3 P1,P2,P3
B        N1       P1
C        N1,N2    P1,P2
Run Code Online (Sandbox Code Playgroud)

我可以通过使用分区和分组创建一个窗口来完成一列的操作。然后我在窗口上使用收集列表和分组并聚合以获得一列。这适用于一列。

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

wer*_*ner 11

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

df.groupby('Column_1').agg(F.collect_list('Column_2'), F.collect_list('Column_3')).orderBy('Column_1').show()
Run Code Online (Sandbox Code Playgroud)

印刷

+--------+----------------------+----------------------+
|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]|
+--------+----------------------+----------------------+
Run Code Online (Sandbox Code Playgroud)

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

  • 也许[此链接](https://knockdata.github.io/spark-window-function/)很有帮助。根据经验,当我希望操作后的行数保持不变时,我会使用 windows;如果我希望结果中的行数低于原始数据集中的行数,我会使用 groupBy。 (2认同)