在聚合操作中,需要指定键或分组方式,以及指定如何转换一列或多列数据的聚合函数。s
除了处理任意类型的值之外,Spark还可以创建以下分组类型:
最简单的分组通过在select语句中执行聚合来汇总整个DataFrame
“group by”指定一个或者多个key也可以指定一个或者多个聚合函数,来对包括value的列执行行转换操作。
“window”指定一个或者多个key也可以指定一个或者多个聚合函数,来对包含value的列执行转换操作。
“grouping set”可用于在多个不同级别进行聚合。grouping set是SQL中的一个保留字,而在DataFrame中需要使用rollup和cube。
“rollup”指定一个或多个key,也可以指定一个或多个聚合函数,来对包含value的列执行转换操作,并会针对指定的多个key进行分级分组汇总。
“cube”指定一个或多个key,也可以指定一个或多个聚合函数,来对包含value 的列执行转换操作,并会针对指定的多个key进行全组合分组汇总。
注意:要获得一个精确的结果,开销会非常大。但是计算出一个近似的结果要相对容易的多。通常使用一些近似函数,会提高spark作业的效率
聚合函数
count函数
count函数是一个转换操作而不是一个动作操作。
count可以执行以下2种操作:
对指定列进行计数
使用count(*)或count(1)对所有列进行计数
approx_count_distinct函数
功能与count_distinct一样,但是统计的结果允许有误差。这里approx_count_distinct的另一个参数就指定了可容忍的误差的最大误差。
sumDistinct函数
去重后,进行求s