Pular para o conteúdo principal

posexplode

Retorna uma nova linha para cada elemento com a posição especificada na matriz ou mapa fornecido. Usa o nome de coluna default pos para posição e col para elementos na matriz e key e value para elementos no mapa, a menos que especificado de outra forma.

Sintaxe

Python
from pyspark.sql import functions as sf

sf.posexplode(col)

Parâmetros

Parâmetro

Tipo

Descrição

col

pyspark.sql.Column ou nome da coluna

coluna de destino para trabalhar.

Devoluções

pyspark.sql.Column: uma linha por item de matriz ou valor key de mapa, incluindo as posições como uma coluna separada.

Exemplos

Exemplo 1 : Explodindo uma coluna de matriz

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

Exemplo 2 : Explodindo uma coluna de mapa

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