Condividi tramite


TableValuedFunction.explode

Restituisce un dataframe contenente una nuova riga per ogni elemento nella matrice o nella mappa specificata. Il nome di colonna predefinito è col per gli elementi in una matrice e keyvalue per gli elementi in una mappa. Per usare nomi di colonna diversi, chiamare toDF() sul dataframe restituito.

Sintassi

spark.tvf.explode(collection)

Parametri

Parametro TIPO Description
collection pyspark.sql.Column Colonna di destinazione su cui lavorare.

Restituzioni

pyspark.sql.DataFrame: dataframe con una nuova riga per ogni elemento.

Esempi

Esempio 1: esplodere una colonna di matrice

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

Esempio 2: esplodere una colonna della mappa

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

Esempio 3: esplodere una matrice di colonne 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|
+---+---+

Esempio 4: esplodere una colonna di matrice vuota

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

Esempio 5: esplodere una colonna mappa vuota

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

Esempio 6: Override dei nomi di colonna predefiniti

Poiché spark.tvf.explode restituisce un dataframe, usare toDF() per rinominare le colonne di output. .alias() non ha alcun effetto sulle colonne esplose.

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