pyspark - select 和 agg 之间的区别

问题描述 投票:0回答:1

以下两者有什么区别 -

df.select(min("salary")).show()

df.agg({'salary':'min'}).show()

另外,这两个有什么区别 -

df.groupBy("department").agg({'salary':'min'}).show()

df.groupBy("Company").min('salary').show()

select pyspark group-by aggregate
1个回答
1
投票

在 Spark 中,有很多不同的方式来编写同一件事。这主要取决于你喜欢 SQL 写作还是 Python 写作。

df.select(min("salary"))
相当于 SQL :

select min(salary) from df

此查询计算列

salary
的最小值,无需任何 group by 子句。 相当于

from pyspark.sql import functions as F

df.groupBy().agg(F.min("salary"))

# OR

df.groupBy().agg({'salary':'min'})

如您所见,

groupBy
是空的,因此您不按任何内容进行分组。 Python 还可以解释字典
{'salary':'min'}
,它相当于函数
F.min("salary")

方法

agg
取决于对象。应用于
Dataframe
,相当于
df.groupBy().agg
agg
也是对象
GroupedData
的方法,它是在执行
df.groupBy()
时创建的。我添加了官方文档的链接,您可以在其中看到两种方法之间的区别。

编写

df.groupBy("department").agg({'salary':'min'})
时,可以在方法
agg
中指定几种不同的聚合。例如,您可以这样做:

from pyspark.sql import functions as F 

df.groupBy("department").agg(F.min("salary"), F.max("age"))

# OR

df.groupBy("department").agg({'salary':'min', 'age':'max'})

# But you cannot do 

df.groupBy("department").min("salary").max("age")
>> AttributeError: 'DataFrame' object has no attribute 'max'
© www.soinside.com 2019 - 2024. All rights reserved.