【问题标题】:How to flatten a pyspark dataframe? (spark 1.6)如何展平pyspark数据框? (火花1.6)
【发布时间】:2017-10-10 14:40:46
【问题描述】:

我正在使用 Spark 1.6

这是我的数据:

eDF = sqlsc.createDataFrame([Row(v=1, eng_1=10,eng_2=20),
                        Row(v=2, eng_1=15,eng_2=30),
                        Row(v=3, eng_1=8,eng_2=12)])
eDF.select('v','eng_1','eng_2').show()

+---+-----+-----+
|  v|eng_1|eng_2|
+---+-----+-----+
|  1|   10|   20|
|  2|   15|   30|
|  3|    8|   12|
+---+-----+-----+

我想“展平”这张桌子。 也就是说:

+---+-----+---+
|  v|  key|val|
+---+-----+---+
|  1|eng_1| 10|
|  1|eng_2| 20|
|  2|eng_1| 15|
|  2|eng_2| 30|
|  3|eng_1|  8|
|  3|eng_2| 12|
+---+-----+---+

请注意,由于我使用的是 Spark 1.6,因此我无法使用 pyspar.sql.functions.create_mappyspark.sql.functions.posexplode

【问题讨论】:

    标签: dataframe pyspark explode


    【解决方案1】:

    使用rdd.flatMap 将其展平:

    df = spark.createDataFrame(
        eDF.rdd.flatMap(
            lambda r: [Row(v=r.v, key=col, val=r[col]) for col in ['eng_1', 'eng_2']]
        )
    )
    df.show()
    +-----+---+---+
    |  key|  v|val|
    +-----+---+---+
    |eng_1|  1| 10|
    |eng_2|  1| 20|    
    |eng_1|  2| 15|
    |eng_2|  2| 30|
    |eng_1|  3|  8|
    |eng_2|  3| 12|
    +-----+---+---+
    

    【讨论】:

      猜你喜欢
      • 2019-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-28
      • 1970-01-01
      相关资源
      最近更新 更多