当前位置:  开发笔记 > 后端 > 正文

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

如何解决《使用SparkDataFramegroupby时如何获取其他列?》经验,为你挑选了2个好方法。

当我像这样使用DataFrame groupby时:

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

我只会得到一个包含"age"和"count(id)"列的DataFrame,但是在df中,还有许多其他列,例如"name".

总而言之,我希望得到MySQL中的结果,

"按年龄从df组中选择姓名,年龄,计数(id)"

在Spark中使用groupby时我该怎么办?



1> zero323..:

总的来说,一般来说,您必须将聚合结果与原始表连接起来.Spark SQL遵循与大多数主要数据库(PostgreSQL,Oracle,MS SQL Server)相同的pre-SQL:1999约定,它不允许在聚合查询中使用其他列.

因为对于像计数结果这样的聚合没有很好地定义,并且在支持这种类型的查询的系统中行为往往会有所不同,所以您可以使用任意聚合(如first或)来包含其他列last.

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



2> 小智..:

在执行groupBy之后获取所有列的一种方法是使用join函数.

feature_group = ['name', 'age']
data_counts = df.groupBy(feature_group).count().alias("counts")
data_joined = df.join(data_counts, feature_group)

data_joined现在将包含所有列,包括计数值.

推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有