python - 将 PySpark Dataframe 中的一行拆分为多行

标签 python apache-spark pyspark apache-spark-sql

我目前有一个数据框,其中一列的类型为 "a b c d e ..."。调用此列 col4

我想通过拆分 col4 的元素将单行拆分为多行,同时保留所有其他列的值。

因此,例如,给定一个只有一行的 df:

|col1[0] | col2[0] | col3[0] | a b c |

我希望输出为:

|col1[0] | col2[0] | col3[0] | a | 
|col1[0] | col2[0] | col3[0] | b |
|col1[0] | col2[0] | col3[0] | c |

使用 split 和 explode 函数,我尝试了以下方法:

d = COMBINED_DF.select(col1, col2, col3, explode(split(my_fun(col4), " ")))

但是,这会导致以下输出:

|col1[0] | col2[0] | col3[0] | a b c |
|col1[0] | col2[0] | col3[0] | a b c |
|col1[0] | col2[0] | col3[0] | a b c |

这不是我想要的。

最佳答案

这是一个可重现的例子:

# Create dummy data
df = sc.parallelize([(1, 2, 3, 'a b c'),
                     (4, 5, 6, 'd e f'),
                     (7, 8, 9, 'g h i')]).toDF(['col1', 'col2', 'col3','col4'])


# Explode column
from pyspark.sql.functions import split, explode
df.withColumn('col4',explode(split('col4',' '))).show()
+----+----+----+----+
|col1|col2|col3|col4|
+----+----+----+----+
|   1|   2|   3|   a|
|   1|   2|   3|   b|
|   1|   2|   3|   c|
|   4|   5|   6|   d|
|   4|   5|   6|   e|
|   4|   5|   6|   f|
|   7|   8|   9|   g|
|   7|   8|   9|   h|
|   7|   8|   9|   i|
+----+----+----+----+

关于python - 将 PySpark Dataframe 中的一行拆分为多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40099706/

相关文章:

python - 安装一半的包和python循环依赖

apache-spark - Spark 中的广播哈希联接和广播嵌套循环联接有什么区别?

pyspark - 如何在 databricks 中为 Redis 连接设置 jar 配置

python - python中DataFrame中列的条件更新

python - 作业完成后 spark-submit 继续挂起

python - 如何为每个子图添加标题

python - while循环在python中打印列表

python - pytest 中的 assertTrue() 断言空列表

scala - Spark 2.0并行JobProgressListener惨败

scala - Spark SQL 嵌套 withColumn