Pular para o conteúdo principal

TableValuedFunction.explode

Retorna um DataFrame contendo uma nova linha para cada elemento na matriz ou mapa fornecido. O nome de coluna default é col para elementos em uma matriz e key e value para elementos em um mapa. Para usar nomes de coluna diferentes, chame toDF() no DataFrame retornado.

Sintaxe

Python
spark.tvf.explode(collection)

Parâmetros

Parâmetro

Tipo

Descrição

collection

pyspark.sql.Column

coluna de destino para trabalhar.

Devoluções

pyspark.sql.DataFrameUm DataFrame com uma nova linha para cada elemento.

Exemplos

Exemplo 1 : Explodindo uma coluna de matriz

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

Exemplo 2 : Explodindo uma coluna de mapa

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

Exemplo 3 : Explodindo um array de colunas do tipo struct

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

Exemplo 4 : Explodindo uma coluna de matriz vazia

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

Exemplo 5 : Explodindo uma coluna vazia do mapa

Python
import pyspark.sql.functions as sf
spark.tvf.explode(sf.create_map()).show()
Output
+---+-----+
|key|value|
+---+-----+
+---+-----+

Exemplo 6 : Substituindo os nomes de coluna default

Como spark.tvf.explode retorna um DataFrame, use toDF() para renomear as colunas de saída. .alias() não tem efeito nas colunas explodidas.

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