取消透视具有动态列的 Dataframe Pyspark

um6iljoc  于 2022-12-03  发布在  Spark
关注(0)|答案(1)|浏览(143)

我有这样的数据

我想通过动态调用列来取消透视 Dataframe ,而不需要硬编码。如何实现?

5sxhfpxr

5sxhfpxr1#

创建一个结构列的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|      |
+---+------+------+

相关问题