返回一个数据帧,其中包含给定数组或映射中每个元素的新行。 默认列名称用于col数组中的元素和keyvalue映射中的元素。 若要使用不同的列名,请调用 toDF() 返回的数据帧。
Syntax
spark.tvf.explode(collection)
参数
| 参数 | 类型 | Description |
|---|---|---|
collection |
pyspark.sql.Column |
要处理的目标列。 |
退货
pyspark.sql.DataFrame:一个数据帧,其中包含每个元素的新行。
例子
示例 1:分解数组列
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|
+---+
示例 2:分解地图列
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|
+---+-----+
示例 3:分解结构列数组
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|
+---+---+
示例 4:分解空数组列
import pyspark.sql.functions as sf
spark.tvf.explode(sf.array()).show()
+---+
|col|
+---+
+---+
示例 5:分解空地图列
import pyspark.sql.functions as sf
spark.tvf.explode(sf.create_map()).show()
+---+-----+
|key|value|
+---+-----+
+---+-----+
示例 6:重写默认列名
由于 spark.tvf.explode 返回 DataFrame,因此用于 toDF() 重命名输出列。
.alias() 对爆炸列没有影响。
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|
+------+----+