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

时间:2016-10-18 04:47:13

标签: python apache-spark pyspark

我目前有一个数据框,其中一列属于" a b c d e ..."。请拨打此列" col4"

我想通过拆分col4的元素将一行拆分成多行,保留所有其他列的值。

因此,例如,给定一行单行:

  

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 |

这不是我想要的。

1 个答案:

答案 0 :(得分:8)

这是一个可重复的例子:

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