Aller au contenu principal

posexplode_outer

Renvoie une nouvelle ligne pour chaque élément avec une position dans le tableau ou la carte donné(e). Contrairement à posexplode, si le tableau/la carte est null ou vide, alors la ligne (null, null) est produite. 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_outer(col)

parameter

parameter

Type

Description

col

pyspark.sql.Column ou nom de colonne

Colonne cible sur laquelle travailler.

parameter

Type

Description

col

pyspark.sql.Column ou nom de colonne

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 : Utilisation d'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.select('*', sf.posexplode_outer('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|
| 2| []|NULL|NULL|
| 3| NULL|NULL|NULL|
+---+---------------+----+----+

Exemple 2 : Utilisation d'une colonne de mappage

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.select('*', sf.posexplode_outer('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 |
|2 |{} |NULL|NULL|NULL |
|3 |NULL |NULL|NULL|NULL |
+---+---------------------------+----+----+-----+