Dataframe 如何展平pyspark数据帧?(火花1.6)

Dataframe 如何展平pyspark数据帧?(火花1.6),dataframe,pyspark,explode,Dataframe,Pyspark,Explode,我正在使用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

我正在使用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\u map
pyspark.sql.functions.posexplode
使用
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|
+-----+---+---+

使用
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|
+-----+---+---+