pyspark-选择和聚集之间的区别

时间:2020-09-30 04:02:18

标签: select pyspark group-by aggregate

以下两个有什么区别-

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

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

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

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

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

1 个答案:

答案 0 :(得分:0)

在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().aggagg也是对象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'
相关问题