Freigeben über


TableValuedFunction.explode

Gibt einen DataFrame zurück, der eine neue Zeile für jedes Element in der angegebenen Matrix oder Zuordnung enthält. Der Standardspaltenname ist col für Elemente in einem Array und keyvalue für Elemente in einer Karte vorgesehen. Um unterschiedliche Spaltennamen zu verwenden, rufen Sie toDF() den zurückgegebenen DataFrame auf.

Syntax

spark.tvf.explode(collection)

Die Parameter

Parameter Typ Description
collection pyspark.sql.Column Zielspalte, an der gearbeitet werden soll.

Rückkehr

pyspark.sql.DataFrame: Ein DataFrame mit einer neuen Zeile für jedes Element.

Examples

Beispiel 1: Explodieren einer Arrayspalte

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

Beispiel 2: Explodieren einer Kartenspalte

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

Beispiel 3: Explodieren eines Arrays von Strukturspalten

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

Beispiel 4: Explodieren einer leeren Arrayspalte

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

Beispiel 5: Explodieren einer leeren Kartenspalte

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

Beispiel 6: Überschreiben der Standardspaltennamen

Da spark.tvf.explode ein DataFrame zurückgegeben wird, verwenden toDF() Sie die Ausgabespalten umzubenennen. .alias() hat keine Auswirkung auf die explodierten Säulen.

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