我有这样的数据
我想通过动态调用列来取消透视 Dataframe ,而不需要硬编码。如何实现?
5sxhfpxr1#
创建一个结构列的array,该结构列使用列表解析组合列和列值。使用inline分解struct列。
array
inline
struct
df =spark.createDataFrame([ ('78','20','19','90'), ('78','20','19','&') ], ('Machines', 'Books', 'Vehicles', 'Plants')) df.show() df.withColumn('tab', F.array(*[F.struct(lit(x).alias('Fields'), col(x).alias('Count')).alias(x) for x in df.columns])).selectExpr('inline(tab)').show() +---+------+------+ | Id| Date|Amount| +---+------+------+ | 1|202201| 50| | 1|202202| 150| | 1|202203| 100| | 2|202201| 10| | 2|202202| | | 2|202203| 50| | 3|202201| 20| | 3|202202| 10| | 3|202203| | +---+------+------+
1条答案
按热度按时间5sxhfpxr1#
创建一个结构列的
array
,该结构列使用列表解析组合列和列值。使用inline
分解struct
列。