Aller au contenu principal

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

Python
spark.tvf.explode(collection)

parameter

parameter

Type

Description

collection

pyspark.sql.Column

Colonne cible sur laquelle travailler.

parameter

Type

Description

collection

pyspark.sql.Column

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

Python
import pyspark.sql.functions as sf
spark.tvf.explode(sf.array(sf.lit(1), sf.lit(2), sf.lit(3))).show()
Output
+---+
|col|
+---+
| 1|
| 2|
| 3|
+---+

Exemple 2 : Éclatement d'une colonne de type map

Python
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()
Output
+---+-----+
|key|value|
+---+-----+
| a| b|
| c| d|
+---+-----+

Exemple 3 : Éclatement d’un tableau de colonnes de structure

Python
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()
Output
+---+---+
| a| b|
+---+---+
| 1| 2|
| 3| 4|
+---+---+

Example 4 : Explosion d’une colonne de tableau vide

Python
import pyspark.sql.functions as sf
spark.tvf.explode(sf.array()).show()
Output
+---+
|col|
+---+
+---+

Exemple 5 : Explosion d’une colonne de carte vide

Python
import pyspark.sql.functions as sf
spark.tvf.explode(sf.create_map()).show()
Output
+---+-----+
|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.

Python
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()
Output
+------+
|number|
+------+
| 1|
| 2|
| 3|
+------+
Python
# 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()
Output
+------+----+
|letter|pair|
+------+----+
| a| b|
| c| d|
+------+----+