当我像这样使用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之前的约定,不允许在聚合查询中添加列
由于计数结果等聚合的定义不明确,而且在支持此类查询的系统中,行为往往会有所不同,因此您可以使用任意聚合(如first
或last
)来包含其他列
在某些情况下,您可以使用窗口函数和后续的where
替换agg
,但根据上下文,这可能会非常昂贵