pyspark中的爆炸函数

pyspark中的爆炸函数,pyspark,pyspark-sql,pyspark-dataframes,Pyspark,Pyspark Sql,Pyspark Dataframes,我的数据框看起来像- +----+----+-------------+ |col1|col2| col3| +----+----+-------------+ | 1| A|[[[1, 2, 3]]]| | 2| B| [[[3, 5]]]| +----+----+-------------+ 我想要数据帧- +----+----+----+ |col1|col2|col3| +----+----+----+ | 1| A| 1| | 1|

我的数据框看起来像-

+----+----+-------------+
|col1|col2|         col3|
+----+----+-------------+
|   1|   A|[[[1, 2, 3]]]|
|   2|   B|   [[[3, 5]]]|
+----+----+-------------+
我想要数据帧-

+----+----+----+
|col1|col2|col3|
+----+----+----+
|   1|   A|   1|
|   1|   A|   2|
|   1|   A|   3|
|   2|   B|   3|
|   2|   B|   5|
+----+----+----+
我的代码是-

from pyspark.sql.functions import explode
df = spark.createDataFrame([(1, "A", [[[1,2,3]]]), (2, "B", [[[3,5]]])],["col1", "col2", "col3"])
df1 = df.withColumn("col3", explode(df.col3))
df1.show()
但结果是——

+----+----+-----------+
|col1|col2|       col3|
+----+----+-----------+
|   1|   A|[[1, 2, 3]]|
|   2|   B|   [[3, 5]]|
+----+----+-----------+

如何使用pyspark中的explode函数解决此问题

因为您有
嵌套数组
我们需要
首先使用展平内置函数展平嵌套数组
,然后使用explode函数

尝试:

from pyspark.sql.functions import *
df.withColumn("col3",explode(flatten(flatten(col("col3"))))).show()
#+----+----+----+
#|col1|col2|col3|
#+----+----+----+
#|   1|   A|   1|
#|   1|   A|   2|
#|   1|   A|   3|
#|   2|   B|   3|
#|   2|   B|   5|
#+----+----+----+

另一种方法是遍历
嵌套数组[0][0]
,并在最内部的数组上进行
分解,如的注释中所述


由于您使用的是
嵌套数组
,我们需要先使用展平内置函数,然后使用分解函数来展平嵌套数组

尝试:

from pyspark.sql.functions import *
df.withColumn("col3",explode(flatten(flatten(col("col3"))))).show()
#+----+----+----+
#|col1|col2|col3|
#+----+----+----+
#|   1|   A|   1|
#|   1|   A|   2|
#|   1|   A|   3|
#|   2|   B|   3|
#|   2|   B|   5|
#+----+----+----+

另一种方法是遍历
嵌套数组[0][0]
,并在最内部的数组上进行
分解,如的注释中所述

df.withColumn('col3',explode(df.col3[0][0]).show()
df.withColumn('col3',explode(df.col3[0][0]).show()