SQL中的聚合函数

SQL函数

1.聚合函数

  • AVG(表达式) 返回表达式中所有的平均值。仅用于数字列并自动忽略NULL值。
--计算人员的平均年龄
SELECT AVG(age) FROM s_people_info 
  • COUNT(表达式) 返回表达式中非NULL值的数量。可用于数字和字符列。
--计算人员的总年龄
SELECT COUNT(age) FROM s_people_info 
  • COUNT(*) 返回表中的行数(包括有NULL值的列)。
--获取人员的总人数
SELECT COUNT(*) FROM s_people_info 
  • MAX(表达式) 返回表达式中的最大值,忽略NULL值。可用于数字、字符和日期时间列。
--获取最大的年龄
SELECT MAX(age) FROM s_people_info 
  • MIN(表达式) 返回表达式中的最小值,忽略NULL值。可用于数字、字符和日期时间列。
--获取最小的年龄
SELECT MIN(age) FROM s_people_info 
  • SUM(表达式) 返回表达式中所有的总和,忽略NULL值。仅用于数字列。
--获取年龄总值
SELECT SUM( age ) FROM s_people_info
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]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小七会喷火

小七想要bi

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值