TableValuedFunction.explode

Devuelve un DataFrame que contiene una nueva fila para cada elemento de la matriz o mapa especificados. El nombre de columna predeterminado es col para los elementos de una matriz y key para value los elementos de un mapa. Para usar nombres de columna diferentes, llame a toDF() en el dataframe devuelto.

Syntax

spark.tvf.explode(collection)

Parámetros

Parámetro Tipo Description
collection pyspark.sql.Column Columna de destino en la que trabajar.

Devoluciones

pyspark.sql.DataFrame: DataFrame con una nueva fila para cada elemento.

Examples

Ejemplo 1: Exploding an array column

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

Ejemplo 2: Exploding a map column

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

Ejemplo 3: Exploding an array of struct column

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

Ejemplo 4: Exploding an empty array column

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

Ejemplo 5: Exploding an empty map column

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

Ejemplo 6: Invalidación de los nombres de columna predeterminados

Dado que spark.tvf.explode devuelve un dataframe, use toDF() para cambiar el nombre de las columnas de salida. .alias() no tiene ningún efecto en las columnas explotadas.

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