以下两者有什么区别 -
df.select(min("salary")).show()
和
df.agg({'salary':'min'}).show()
另外,这两个有什么区别 -
df.groupBy("department").agg({'salary':'min'}).show()
和
df.groupBy("Company").min('salary').show()
在 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'