【问题标题】:Splitting a row in a PySpark Dataframe into multiple rows将 PySpark Dataframe 中的一行拆分为多行
【发布时间】:2017-02-27 05:21:48
【问题描述】:

我目前有一个数据框,其中一列的类型为"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 |

使用拆分和分解功能,我尝试了以下方法:

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 |

这不是我想要的。

【问题讨论】:

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


    【解决方案1】:

    这是一个可重现的例子:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-25
      • 1970-01-01
      • 2020-11-10
      • 2018-03-10
      • 2017-04-22
      • 1970-01-01
      相关资源
      最近更新 更多