TableValuedFunction.explode

Devolve um DataFrame contendo uma nova linha para cada elemento no array ou mapa dado. O nome padrão da coluna é col para elementos num array e key para value elementos num mapa. Para usar diferentes nomes de colunas, chame toDF() o DataFrame devolvido.

Sintaxe

spark.tvf.explode(collection)

Parâmetros

Parâmetro Tipo Description
collection pyspark.sql.Column Coluna alvo para trabalhar.

Devoluções

pyspark.sql.DataFrame: Um DataFrame com uma nova linha para cada elemento.

Examples

Exemplo 1: Explodir uma coluna de array

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: Explodir 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: Explodir uma matriz de colunas de estruturas

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: Explodir uma coluna de array vazia

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

Exemplo 5: Explodir uma coluna de mapa vazia

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

Exemplo 6: Sobrepor os nomes das colunas por defeito

Como spark.tvf.explode devolve um DataFrame, utiliza-se 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|
+------+----+