# let's say that you want to group by "someKey", and collect the values
# of all the other columns.
from pyspark.sql import functions as F
result = df\
.groupBy("someKey")\
.agg(*[F.collect_set(c).alias(c) for c in df.columns if c != "someKey"])
val aggs = df.columns
.map(c => collect_set(c) as c)
.filter( _ != "someKey") // optionnaly
val result = df.groupBy("someKey").agg(aggs.head, aggs.tail : _* )
2条答案
按热度按时间watbbzwu1#
你可以使用
df.columns
来访问你的dataframe的列列表。然后你可以处理它来生成你想要的聚合列表:注意:如果您还想收集
someKey
列,则可以删除if c != "someKey"
。在scala中,
agg
函数签名如下:def agg(expr: Column, exprs: Column*): DataFrame
因此,我们不能直接解包列表,但有一个简单的解决方法:
wgeznvg72#
如果你的目的是聚合所有匹配相同键的元素作为一个json对象列表,你可以执行如下操作:
输出: