2 votes

Pyspark - Groupby and collect list over multiple columns and create multiple columns

J'ai le dataframe ci-dessous sur lequel j'essaie de regrouper et d'agrégér des données.

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

Sortie requise :

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

Je suis capable de le faire sur une colonne en créant une fenêtre en utilisant la partition et groupby. Ensuite j'utilise collect list et group by sur la fenêtre et agrège pour obtenir une colonne. Cela fonctionne pour une colonne.

Comment réaliser la même chose sur 2 colonnes. Veuillez aider.

10voto

werner Points 1341

La fonction agg du group by peut prendre plus d'une fonction d'agrégation. Vous pouvez ajouter collect_list deux fois :

df.groupby('Colonne_1').agg(F.collect_list('Colonne_2'), F.collect_list('Colonne_3')).orderBy('Colonne_1').show()

affiche

+--------+----------------------+----------------------+
|Colonne_1|collect_list(Colonne_2)|collect_list(Colonne_3)|
+--------+----------------------+----------------------+
|       A|          [N1, N2, N3]|          [P1, P2, P3]|
|       B|                  [N1]|                  [P1]|
|       C|              [N1, N2]|              [P1, P2]|
+--------+----------------------+----------------------+

Pour un regroupement simple, il n'est pas nécessaire d'utiliser une Window.

0 votes

Fonctionne comme prévu. Y a-t-il un lien ou un article qui indique clairement dans quels scénarios nous devons utiliser window? et où nous pouvons utiliser groupby comme ci-dessus. Ce serait utile à apprendre. Merci.

2 votes

Peut-être ce lien est utile. En règle générale, j'utiliserais des fenêtres lorsque je m'attends à ce que le nombre de lignes après l'opération reste le même et j'utiliserais un groupBy si je m'attends à ce que le nombre de lignes dans le résultat soit inférieur à celui du jeu de données original.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X