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