【问题标题】:explode function in pysparkpyspark中的爆炸功能
【发布时间】:2020-03-15 03:41:12
【问题描述】:

我的数据框看起来像 -

+----+----+-------------+
|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函数解决

【问题讨论】:

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

标签: pyspark pyspark-sql pyspark-dataframes


【解决方案1】:

由于您拥有nested array,我们需要先在内置函数中使用flatten,然后使用explode函数来flatten nested arrays

Try with:

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

其他方法是遍历nested array[0][0] 并在jxc 的评论中提到的最内部数组上执行explode

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

【讨论】:

    猜你喜欢
    • 2022-01-18
    • 1970-01-01
    • 2016-11-07
    • 2015-07-08
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多