Teilen über


posexplode_outer

Gibt eine neue Zeile für jedes Element mit Position im angegebenen Array oder der angegebenen Abbildung zurück. Im Gegensatz zu posexplode wird die Zeile (NULL, NULL) erzeugt, wenn das Array/die Zuordnung null oder leer ist. Verwendet den Standardspaltennamen pos für die Position und col für Elemente im Array und keyvalue für Elemente in der Karte, sofern nicht anders angegeben.

Syntax

from pyspark.sql import functions as sf

sf.posexplode_outer(col)

Die Parameter

Parameter Typ Description
col pyspark.sql.Column oder Spaltenname Zielspalte, an der gearbeitet werden soll.

Rückkehr

pyspark.sql.Column: eine Zeile pro Arrayelement oder Kartenschlüsselwert, einschließlich Positionen als separate Spalte.

Examples

Beispiel 1: Verwenden einer Arrayspalte

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()
+---+---------------+----+----+
|  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|
+---+---------------+----+----+

Beispiel 2: Verwenden einer Kartenspalte

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)
+---+---------------------------+----+----+-----+
|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 |
+---+---------------------------+----+----+-----+