Compartilhar via


TableValuedFunction.explode

Retorna um DataFrame que contém uma nova linha para cada elemento na matriz ou mapa fornecido. O nome da coluna padrão é col para elementos em uma matriz e key para value elementos em um mapa. Para usar nomes de coluna diferentes, chame toDF() o DataFrame retornado.

Sintaxe

spark.tvf.explode(collection)

Parâmetros

Parâmetro Tipo Description
collection pyspark.sql.Column Coluna de destino na qual trabalhar.

Devoluções

pyspark.sql.DataFrame: Um 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 uma matriz de coluna 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 de mapa vazia

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

Exemplo 6: Substituindo os nomes de coluna padrão

Como spark.tvf.explode retorna um DataFrame, use toDF() para renomear as colunas de saída. .alias() não tem efeito sobre as 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|
+------+----+