posexplode
Renvoie une nouvelle ligne pour chaque élément avec une position dans le tableau ou la carte donné(e). Utilise le nom de colonne default pos pour la position, et col pour les éléments du tableau et key et value pour les éléments de la carte, sauf indication contraire.
Syntaxe
Python
from pyspark.sql import functions as sf
sf.posexplode(col)
parameter
parameter | Type | Description |
|---|---|---|
|
| Colonne cible sur laquelle travailler. |
Renvoie
pyspark.sql.Column: une ligne par élément de tableau ou valeur de clé de mappage, y compris les positions en tant que colonne distincte.
Exemples
Exemple 1 : Exposer une colonne de tableau
Python
from pyspark.sql import functions as sf
df = spark.sql('SELECT * FROM VALUES (1,ARRAY(1,2,3,NULL)), (2,ARRAY()), (3,NULL) AS t(i,a)')
df.show()
Output
+---+---------------+
| i| a|
+---+---------------+
| 1|[1, 2, 3, NULL]|
| 2| []|
| 3| NULL|
+---+---------------+
Python
df.select('*', sf.posexplode('a')).show()
Output
+---+---------------+---+----+
| i| a|pos| col|
+---+---------------+---+----+
| 1|[1, 2, 3, NULL]| 0| 1|
| 1|[1, 2, 3, NULL]| 1| 2|
| 1|[1, 2, 3, NULL]| 2| 3|
| 1|[1, 2, 3, NULL]| 3|NULL|
+---+---------------+---+----+
Exemple 2 : Éclatement d'une colonne de type map
Python
from pyspark.sql import functions as sf
df = spark.sql('SELECT * FROM VALUES (1,MAP(1,2,3,4,5,NULL)), (2,MAP()), (3,NULL) AS t(i,m)')
df.show(truncate=False)
Output
+---+---------------------------+
|i |m |
+---+---------------------------+
|1 |{1 -> 2, 3 -> 4, 5 -> NULL}|
|2 |{} |
|3 |NULL |
+---+---------------------------+
Python
df.select('*', sf.posexplode('m')).show(truncate=False)
Output
+---+---------------------------+---+---+-----+
|i |m |pos|key|value|
+---+---------------------------+---+---+-----+
|1 |{1 -> 2, 3 -> 4, 5 -> NULL}|0 |1 |2 |
|1 |{1 -> 2, 3 -> 4, 5 -> NULL}|1 |3 |4 |
|1 |{1 -> 2, 3 -> 4, 5 -> NULL}|2 |5 |NULL |
+---+---------------------------+---+---+-----+