spark自定义函数详解:UDF 与 UDAF 实战指南
在 Spark SQL 中,内置函数(如 sum、concat)可满足多数基础需求,但复杂业务场景往往需要自定义逻辑。Spark 支持两种核心自定义函数:用户定义函数(UDF) 和用户定义聚合函数(UDAF)。本文将深入解析两者的实现原理、使用场景及实战案例,帮助你灵活扩展 Spark 的数据处理能力。
自定义函数概述
为什么需要自定义函数?
- 业务个性化:内置函数无法覆盖复杂业务逻辑(如特殊格式转换、自定义指标计算);
- 代码复用:将常用逻辑封装为函数,避免重复开发;
- 简化 SQL:用自定义函数替代复杂 SQL 子查询,提升可读性。
自定义函数的类型
- UDF(User-Defined Function):一行输入 → 一行输出,如字符串拼接、格式转换;
- UDAF(User-Defined Aggregate Function):多行输入 → 一行输出,如自定义平均值、加权求和。
UDF:用户定义函数(单行处理)
UDF 是最常用的自定义函数类型,用于对单条记录的字段进行转换或计算。其核心是接收一个或多个输入值,返回单个输出值。
UDF 的定义与注册
Scala 实现 UDF
通过 spark.udf.register 方法注册 UDF,支持匿名函数或方法引用: