SQL中的聚合函数

常用的聚合函数有COUNT()、AVG()、SUM()、MAX()、MIN()。

COUNT()函数:统计数据表中包含的记录行的总数,或者根据查询结果返回列中包含的数据行数。
        COUNT(*)计算表中总的行数,不管某列是否有数值或者为空值。
        COUNT(字段名)计算指定列下总的行数,计算时将忽略空值的行。 


AVG()函数:通过计算返回的行数和每一行数据的和,求得指定列数据的平均值。


SUM()函数:是一个求总和的函数,返回指定列值的总和。


MAX()函数:返回指定列中的最大值,不仅适用于查找数值类型,也可应用于字符类型。


MIN()函数:返回查询列中的最小值,不仅适用于查找数值类型,也可应用于字符类型。 

​ 此外,聚合函数可以与GROUP BY关键字一起使用,对每个分组进行计算。

 

Spark SQL聚合函数的使用方法如下: ### 简单聚合 使用前需导入spark sql内置的函数包,创建SparkSession实例,读取数据文件为DataFrame,并注册为临时视图用于后续SQL查询。示例代码如下: ```scala import org.apache.spark.sql.functions._ val spark = SparkSession.builder().appName("aggregations").master("local[2]").getOrCreate() val empDF = spark.read.json("/usr/file/json/emp.json") // 注册为临时视图,用于后面演示 SQL 查询 empDF.createOrReplaceTempView("emp") empDF.show() ``` 以上代码完成了数据准备工作,之后就可以使用聚合函数对`empDF`进行操作了 [^1]。 ### 自定义聚合函数(UDAF) UDAF用于复杂的聚合操作,以计算平均工资为例,从Spark 3.0版本起,可使用强类型聚合函数`Aggregator`统一自定义聚合函数的使用方式。实现步骤为:定义一个包含累加和计数的缓冲区类,实现`Aggregator`的各个方法,如`zero`用于初始化缓冲区,`reduce`进行数据更新,`merge`合并缓冲区,`finish`计算最终结果。注册聚合函数后,就能在SQL语句中调用计算平均工资 [^2]。 ### 聚合与排序 可以使用`groupBy`方法对数据进行分组,再使用`agg`方法应用聚合函数,最后使用`orderBy`方法进行排序。示例如下: ```scala val score = scDF.groupBy("s_id").agg(sum("s_score") as "sum") score.orderBy(-score("sum")).show ``` 上述代码按`s_id`分组,对`s_score`求和并命名为`sum`,最后按`sum`降序排序并展示结果 [^3]。 ### 近似聚合 在处理大型数据集时,若只关注近似值而非准确值,可使用`approx_count_distinct`函数,还能使用第二个参数指定最大允许误差。示例如下: ```scala empDF.select(approx_count_distinct("ename", 0.1)).show() ``` 此代码计算`ename`列的近似不同值的数量,允许误差为0.1 [^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值