TableValuedFunction.explode
Renvoie un DataFrame contenant une nouvelle ligne pour chaque élément du tableau ou de la carte donné(e). Le nom de colonne default est col pour les éléments d'un tableau et key et value pour les éléments d'une carte. Pour utiliser des noms de colonne différents, appelez toDF() sur le DataFrame renvoyé.
Syntaxe
spark.tvf.explode(collection)
parameter
parameter | Type | Description |
|---|---|---|
|
| Colonne cible sur laquelle travailler. |
Renvoie
pyspark.sql.DataFrame: Un DataFrame avec une nouvelle ligne pour chaque élément.
Exemples
Exemple 1 : Exposer une colonne de tableau
import pyspark.sql.functions as sf
spark.tvf.explode(sf.array(sf.lit(1), sf.lit(2), sf.lit(3))).show()
+---+
|col|
+---+
| 1|
| 2|
| 3|
+---+
Exemple 2 : Éclatement d'une colonne de type map
import pyspark.sql.functions as sf
spark.tvf.explode(
sf.create_map(sf.lit("a"), sf.lit("b"), sf.lit("c"), sf.lit("d"))
).show()
+---+-----+
|key|value|
+---+-----+
| a| b|
| c| d|
+---+-----+
Exemple 3 : Éclatement d’un tableau de colonnes de structure
import pyspark.sql.functions as sf
spark.tvf.explode(sf.array(
sf.named_struct(sf.lit("a"), sf.lit(1), sf.lit("b"), sf.lit(2)),
sf.named_struct(sf.lit("a"), sf.lit(3), sf.lit("b"), sf.lit(4))
)).select("col.*").show()
+---+---+
| a| b|
+---+---+
| 1| 2|
| 3| 4|
+---+---+
Example 4 : Explosion d’une colonne de tableau vide
import pyspark.sql.functions as sf
spark.tvf.explode(sf.array()).show()
+---+
|col|
+---+
+---+
Exemple 5 : Explosion d’une colonne de carte vide
import pyspark.sql.functions as sf
spark.tvf.explode(sf.create_map()).show()
+---+-----+
|key|value|
+---+-----+
+---+-----+
Exemple 6 : Remplacement des noms de colonnes default
Puisque spark.tvf.explode renvoie un DataFrame, utilisez toDF() pour renommer les colonnes de sortie. .alias() n'a aucun effet sur les colonnes éclatées.
import pyspark.sql.functions as sf
# Array: rename the single output column
spark.tvf.explode(sf.array(sf.lit(1), sf.lit(2), sf.lit(3))).toDF("number").show()
+------+
|number|
+------+
| 1|
| 2|
| 3|
+------+
# Map: rename both output columns
spark.tvf.explode(
sf.create_map(sf.lit("a"), sf.lit("b"), sf.lit("c"), sf.lit("d"))
).toDF("letter", "pair").show()
+------+----+
|letter|pair|
+------+----+
| a| b|
| c| d|
+------+----+