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