使用Spark DataFrame groupby时如何获取其他列?

当我像这样使用DataFrame groupby时:

df.groupBy(df(“age”)).agg(Map(“id”->“count”))

我将只得到一个包含列“age”和“count(id)”的数据帧,但在df中,还有许多其他列,如“name”

总之,我想得到MySQL中的结果

“按年龄从df组中选择姓名、年龄、计数(id)”

在Spark中使用groupby时应该做什么

长话短说一般来说,您必须将聚合结果与原始表连接起来。Spark SQL遵循与大多数主要数据库(PostgreSQL、Oracle、MS SQL Server)相同的SQL:1999之前的约定,不允许在聚合查询中添加列

由于计数结果等聚合的定义不明确,而且在支持此类查询的系统中,行为往往会有所不同,因此您可以使用任意聚合(如firstlast)来包含其他列

在某些情况下,您可以使用窗口函数和后续的where替换agg,但根据上下文,这可能会非常昂贵

发表评论