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

How to flatten a pyspark dataframe? (spark 1.6)

我正在使用 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|
+---+-----+-----+

我要'flatten'这个table。 也就是说:

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

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