2 votes

Pyspark - Groupby et collecte de listes sur plusieurs colonnes et création de colonnes multiples

J'ai le cadre de données ci-dessous sur lequel j'essaie de regrouper et d'agréger les 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 le groupby. Ensuite, j'utilise collect list et groupby sur la fenêtre et j'agrège pour obtenir une colonne. Cela fonctionne pour une seule colonne.

Comment effectuer la même chose sur 2 colonnes. Merci de m'aider.

10voto

werner Points 1341

En agg fonction de la groupe par peut prendre plus d'une fonction d'agrégation. Vous pouvez ajouter liste de collecte deux fois :

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

imprime

+--------+----------------------+----------------------+
|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]|
+--------+----------------------+----------------------+

Pour un simple regroupement, il n'est pas nécessaire d'utiliser un fichier Fenêtre .

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