如何在pyspark中转置Dataframe?

ztmd8pv5  于 2021-07-13  发布在  Spark
关注(0)|答案(1)|浏览(457)

如何在pyspark中转置列?我想让列变成行,行变成列。
以下是输入:

+---- +------+-----+-----+
|idx  | vin  |cur  | mean|
+---- +------+-----+-----+
|Type1|     D| 5.0 |6.0  |
|Type2|     C| null| 7.0 |
+---- +------+-----+-----+

预期结果:

+---- +------+-----+
|idx  |Type1 |Type2| 
+---- +------+-----+
|vin  |   D  | C   |
|cur  |  5.0 | null| 
|mean |  6.0 | 7.0 |     
+-----+------+-----+
qq24tv8q

qq24tv8q1#

你可以合并 stack 取消打印的函数 vin , mean 以及 cur 那么列 pivotidx :

from pyspark.sql import functions as F

df1 = df.selectExpr("idx", "stack(3, 'vin',vin, 'cur',cur, 'mean',mean)") \
    .select("idx", "col0", "col1") \
    .groupBy("col0") \
    .pivot("idx").agg(F.first("col1")) \
    .withColumnRenamed("col0", "idx")

df1.show(truncate=False)

# +----+-----+-----+

# |idx |Type1|Type2|

# +----+-----+-----+

# |vin |D    |C    |

# |mean|6.0  |7.0  |

# |cur |5.0  |null |

# +----+-----+-----+

你一个接一个地应用转换,看看它是如何工作的,以及每个部分都做了些什么。

相关问题