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
spark.tvf.explode(collection)
Parâmetros
Parâmetro | Tipo | Descrição |
|---|---|---|
|
| 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
import pyspark.sql.functions as sf
spark.tvf.explode(sf.array(sf.lit(1), sf.lit(2), sf.lit(3))).show()
+---+
|col|
+---+
| 1|
| 2|
| 3|
+---+
Exemplo 2 : Explodindo uma coluna de mapa
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()
+---+-----+
|key|value|
+---+-----+
| a| b|
| c| d|
+---+-----+
Exemplo 3 : Explodindo um array de colunas do tipo struct
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()
+---+---+
| a| b|
+---+---+
| 1| 2|
| 3| 4|
+---+---+
Exemplo 4 : Explodindo uma coluna de matriz vazia
import pyspark.sql.functions as sf
spark.tvf.explode(sf.array()).show()
+---+
|col|
+---+
+---+
Exemplo 5 : Explodindo uma coluna vazia do mapa
import pyspark.sql.functions as sf
spark.tvf.explode(sf.create_map()).show()
+---+-----+
|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.
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()
+------+
|number|
+------+
| 1|
| 2|
| 3|
+------+
# 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()
+------+----+
|letter|pair|
+------+----+
| a| b|
| c| d|
+------+----+