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内置聚合函数。