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


《Spark原理深入与编程实战》