在 Spark 中,有许多不同的方法可以编写相同的内容。这主要取决于您更喜欢 SQL 编写还是 python 编写。
df.select(min("salary")) 相当于 SQL:
select min(salary) from df
此查询在没有任何 group by 子句的情况下计算列 salary 的最小值。
相当于
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方法中指定几个不同的聚合。仅使用min 时,您只能使用一列。例如,您可以这样做:
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'