Spark SQL聚合函数和分组聚合
对大数据进行分析通常都需要对数据进行聚合操作。聚合通常需要某种形式的分组,要么在整个数据集上,要么在一个或多个列上,然后对它们应用聚合函数,比如对每个组进行求和、计数或求平均值等。
Spark SQL提供了许多常用的聚合函数。
聚合函数
在Spark中,所有的聚合都是通过函数完成的。聚合函数被设计用来在一组行上执行聚合,不管那组行是由DataFrame中的所有行还是一组子行组成的。
下表描述了常见的聚合函数:
| 聚合函数 | 描述 | 
|---|---|
| count(col) | 返回每组中成员数量 | 
| countDistinct(col) | 返回每组中成员唯一数量 | 
| approx_count_distinct(col) | 返回每组中成员唯一近似数量 | 
| min(col) | 返回每组中给定列的最小值 | 
| max(col) | 返回每组中给定列的最大值 | 
| sum(col) | 返回每组中给定列的值的和 | 
| sumDistinct(col) | 返回每组中给定列的唯一值的和 | 
| avg(col) | 返回每组中给定列的值的平均 | 
| skewness(col) | 返回每组中给定列的值的分布的偏斜度 | 
| kurtosis(col) | 返回每组中给定列的值的分布的峰度 | 
| variance(col) | 返回每组中给定列的值的无偏方差 | 
| stddev(col) | 返回每组中给定列的值的标准差 | 
| collect_list(col) | 返回每组中给定列的值的集合。返回的集合可能包含重复的值 | 
| collect_set(col) | 返回每组中给定列的唯一值的集合 | 
分组聚合
分组聚合不会在DataFrame中对全局组执行聚合,而是在DataFrame中的每个子组中执行聚合。
通常分组执行聚合的过程分为两步。第一步是通过使用groupBy(col1、col2、……)转换来执行分组,也就是指定要按哪些列分组。与其他返回DataFrame的转换不同,这个groupBy转换返回一个RelationalGroupedDataset类的实例。类RelationalGroupedDataset提供了一组标准的聚合函数,可以将它们应用到每个子组中。这些聚合函数有avg(cols)、count()、mean(cols)、min(cols)、max(cols)和sum(cols)。除了count()函数之外,其余所有的函数都在数字列上运行。
详细讲解
关于这些聚合函数的使用,请参考我的讲解视频:Spark SQL内置聚合函数。
