对于示例数据帧scholor
,
scala> scholor.show
| id| name|age|sal|base|
对于上面,下面的两个都给出了相同的输出。那么 agg() 有什么用。它只是为了名字。
scala> scholor.groupBy("age").sum("base").show /*with out agg */
scala> scholor.groupBy("age").agg(sum("base")).show /* with agg */
+---+---------+
|age|sum(base)|
+---+---------+
agg()
需要任何变量作为参数吗?agg()
需要什么?
提前谢谢。
为了写.sum
这个方法必须存在。它在 API 上硬编码。使用.agg
可以提供其他聚合函数,sum("column")
只是其中之一。
来自agg
的源代码,"ds.agg(...)是 ds.groupBy().agg(...)"的简写。
聚合函数avg
、max
、min
、sum
和count
不是可以在数据帧上调用的方法:
scala> my_df.min("column")
<console> error: value min is not a member of org.apache.spark.sql.DataFrame
agg
是一个 DataFrame 方法,它接受这些聚合函数作为参数:
scala> my_df.agg(min("column"))
res0: org.apache.spark.sql.DataFrame = [min(column): double]
在数据帧上调用groupBy()
会返回一个 RelationalGroupedDataset,该数据集将这些聚合函数作为方法(groupBy
的源代码):
scala> my_df.groupBy().min("column")
res1: org.apache.spark.sql.DataFrame = [min(column): double]