发布时间:2026/8/22 16:30:47
SparkSQL 之 UDF、UDAF 函数代码实现 摘要本文从 UDF/UDAF/UDTF 三大函数类型、两种注册方式、弱类型 vs 强类型 UDAF、Aggregator 生命周期、性能陷阱五个维度配合 2 张架构图 完整代码彻底掌握 SparkSQL 自定义函数实现。关键词UDF, UDAF, UDTF, Aggregator, functions.udf, spark.udf.register一、三大函数类型UDF 一对一: 1 行 → 1 行 (name → UPPER(name)) UDAF 多对一: N 行 → 1 行 (多行 → SUM/AVG) UDTF 一对多: 1 行 → N 行 (一行 → explode 多行)二、函数分类 注册UDF 两种注册方式importorg.apache.spark.sql.functions._// SQL 注册spark.udf.register(myUpper,(s:String)s.toUpperCase)spark.sql(SELECT myUpper(name) FROM users)// DSL 注册valmyUpperUdfudf((s:String)s.toUpperCase)df.withColumn(upper_name,myUpperUdf(col(name)))三、UDAF 深度对比 Aggregator 生命周期强类型 Aggregator推荐importorg.apache.spark.sql.expressions.AggregatorcaseclassAverage(varsum:Double,varcount:Long)objectAverageAggregatorextendsAggregator[Double,Average,Double]{defzero:AverageAverage(0.0,0L)// 初始缓冲defreduce(b:Average,a:Double):Average{b.suma;b.count1;b}// 分区内defmerge(b1:Average,b2:Average):Average{b1.sumb2.sum;b1.countb2.count;b1}// 跨分区deffinish(reduction:Average):Doublereduction.sum/reduction.count// 输出defbufferEncoder:Encoder[Average]Encoders.productdefoutputEncoder:Encoder[Double]Encoders.scalaDouble}valavgUDAFAverageAggregator.toColumn.name(avg_score)ds.select(avgUDAF).show()弱类型 UserDefinedAggregateFunctionclassMyAvgUDAFextendsUserDefinedAggregateFunction{definputSchemaStructType(StructField(input,DoubleType)::Nil)defbufferSchemaStructType(StructField(sum,DoubleType)::StructField(count,LongType)::Nil)defdataTypeDoubleTypedefdeterministictruedefinitialize(buffer:MutableAggregationBuffer){buffer(0)0.0;buffer(1)0L}defupdate(buffer:MutableAggregationBuffer,input:Row){/* 累加 */}defmerge(b1:MutableAggregationBuffer,b2:Row){/* 合并 */}defevaluate(buffer:Row)buffer.getDouble(0)/buffer.getLong(1)}spark.udf.register(myAvg,newMyAvgUDAF)四、性能陷阱与最佳实践⚠️ UDF 是黑盒 → Catalyst 无法优化 · 无法谓词下推 · 无法 WholeStageCodegen · 逐行序列化调用 ✅ 优化建议: 1. 优先用 Spark SQL 内置函数 2. 复杂逻辑用 Scala 表达式组合 3. 必须用 UDF → Pandas UDF (Arrow 向量化, 快 100x) 4. UDAF 优先用强类型 Aggregator五、总结分类UDF 一对一 / UDAF 多对一 / UDTF 一对多注册SQL 用 registerDSL 用 functions.udfUDAF强类型 Aggregator 优于弱类型 UDAF作者大数据技术实践者博客blog.starzy.cnGitHubstarzy1990.github.io专注 AI Agent · LangGraph · RAG · 大数据架构 · 数据工程实践

相关新闻

2026/8/22 16:30:47

AI视频生成本地部署实战:从Stable Video Diffusion到Seedance生态搭建

如果你最近关注AI视频生成,大概率被“Seedance2.5”和“即梦AI5.0”这两个名字刷屏了。各种教程和宣传语里充斥着“吊打付费”、“一键生成”、“学完接单”这类极具诱惑力的词汇,让人感觉仿佛一夜之间,人人都能成为AI视频大师。但事实真的如…

2026/8/22 16:30:47

2026年Java面试核心考点与云原生趋势解析

1. 2026年Java面试趋势与核心考察点2026年的Java技术栈相比前几年有了显著变化,各大厂面试题也呈现出新的特点。从当前技术趋势来看,以下五个领域成为必考重点:1.1 JVM深度优化成为分水岭不再局限于简单的内存模型和GC算法问答,面…

2026/8/22 17:40:51

FEALPy:用 Python 手写有限元全流程的仿真引擎

FEALPy:用 Python 手写有限元全流程的仿真引擎 【免费下载链接】fealpy Finite Element Analysis Library in Python 项目地址: https://gitcode.com/gh_mirrors/fe/fealpy 想用自己的代码控制有限元流程的每一步,FEALPy 就是为这种需求写的 Pyth…

2026/8/22 17:40:51

路由器工作原理深度解析:从选路转发到故障排查实战指南

你有没有想过,为什么家里的Wi-Fi能让你同时刷视频、打游戏,而办公室的网络却能精准地把数据送到成百上千台电脑?这个看似简单的“转发”动作,背后是路由器这个网络“交通警察”在默默工作。对于很多初学者、网络工程师备考者&…

2026/8/22 17:40:51

Ollama-UI:本地大模型的一个简洁聊天界面

Ollama-UI:本地大模型的一个简洁聊天界面 【免费下载链接】ollama-ui Simple HTML UI for Ollama 项目地址: https://gitcode.com/gh_mirrors/ol/ollama-ui Ollama 是本地跑大模型的工具,但默认只能在终端里敲命令交互,每次还得记参数…

2026/8/22 17:35:51

Java面试防坑指南:技术追问与实战应对策略

1. 面试场景还原:当技术较真遇上花式逃避那天下午三点半,西二旗某栋玻璃幕墙大厦的17层会议室里,空气凝固得能拧出水来。我作为面试官刚结束前一位候选人的技术评估,HR递来的简历上赫然印着"谢飞机,5年Java开发经…

2026/8/21 13:13:49

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/21 20:14:07

工业传感器与变送器详解:序章 从物理世界到工业数据

序章 从物理世界到工业数据 ——重新认识工业传感器与变送器 工业自动化系统正变得日益复杂。今天的工业现场早已不是简单的控制回路,而是由多层技术共同构成的立体体系:PLC、DCS、SCADA、MES、工业互联网、边缘计算与人工智能。控制系统可以执行复杂算法,工业网络可以实现…

2026/8/21 15:40:01

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/21 15:40:01

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/22 1:39:53

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…