【发布时间】:2021-05-10 07:38:06
【问题描述】:
我有一个如下所示的数据框:
df = spark.createDataFrame([
Row(foo='a', bar=1, baz=4),
Row(foo='a', bar=2, baz=5),
Row(foo='b', bar=3, baz=6),
])
上面的结果如下:
[Row(bar=1, baz=4, foo='a'), Row(bar=2, baz=5, foo='a'), Row(bar=3, baz=6, foo='b')]
我需要在foo 上进行分组,然后将其他所有内容收集为列表。结果需要保留与派生它们的列相同的名称。
到目前为止,我得到了这个:
df.groupBy('foo').agg(
F.arrays_zip(
F.collect_list(F.col('bar')),
F.collect_list(F.col('baz')),
).alias('events')
)
输出返回一个数据帧,其中events 列包含行,每个行都有递增0、1、2 等的键。
[Row(foo='a', events=[Row(0=1, 1=4), Row(0=2, 1=5)]), Row(foo='b', events=[Row(0=3, 1=6)])]
我想保留原始列名作为键。这样像Row(0=1, 1=4) 这样的行将改为Row(bar=1, baz=4)。如何实现?
【问题讨论】:
标签: apache-spark pyspark apache-spark-sql pyspark-dataframes