collect_set
Collecte les valeurs d'une colonne dans un ensemble, en éliminant les doublons, et renvoie cet ensemble d'objets. Cette fonction est non déterministe car l'ordre des résultats collectés dépend de l'ordre des lignes, qui peut être non déterministe après toute opération de brassage.
Syntaxe
from pyspark.sql import functions as sf
sf.collect_set(col)
parameter
parameter | Type | Description |
|---|---|---|
|
| La colonne cible sur laquelle la fonction est calculée. |
Renvoie
pyspark.sql.Column: Un nouvel objet Colonne représentant un ensemble de valeurs collectées, doublons exclus.
Exemples
Exemple 1 : Recueillir les valeurs d'un DataFrame et trier le résultat par ordre croissant
from pyspark.sql import functions as sf
df = spark.createDataFrame([(1,), (2,), (2,)], ('value',))
df.select(sf.sort_array(sf.collect_set('value')).alias('sorted_set')).show()
+----------+
|sorted_set|
+----------+
| [1, 2]|
+----------+
Exemple 2 : Collecter des valeurs d'un DataFrame et trier le résultat par ordre décroissant.
from pyspark.sql import functions as sf
df = spark.createDataFrame([(2,), (5,), (5,)], ('age',))
df.select(sf.sort_array(sf.collect_set('age'), asc=False).alias('sorted_set')).show()
+----------+
|sorted_set|
+----------+
| [5, 2]|
+----------+
Exemple 3 : Collecter les valeurs d'un DataFrame avec plusieurs colonnes et trier le résultat
from pyspark.sql import functions as sf
df = spark.createDataFrame([(1, "John"), (2, "John"), (3, "Ana")], ("id", "name"))
df = df.groupBy("name").agg(sf.sort_array(sf.collect_set('id')).alias('sorted_set'))
df.orderBy(sf.desc("name")).show()
+----+----------+
|name|sorted_set|
+----+----------+
|John| [1, 2]|
| Ana| [3]|
+----+----------+