UDF UDAF UDTF 区别
UDF UDAF UDTF 区别
UDF
概念:
User-Defined-Function 自定义函数 、一进一出;只对单行数据产生作用;
实际使用时,UDF函数以匿名函数的形式进行操作使用
背景:
- 系统内置函数无法解决实际的业务问题,需要开发者自己编写函数实现自身的业务实现诉求。
- 应用场景非常多,面临的业务不同导致个性化实现很多,故udf很需要。
意义:
- 函数扩展得到解决,极大丰富了可定制化的业务需求。
- Input/Output要求-要解决的问题
- in:out=1:1,只能输入一条记录当中的数据,同时返回一条处理结果。
- 属于最常见的自定义函数,像cos,sin,substring,indexof等均是如此要求
实现步骤(Java创建自定义UDF类)
- 自定义一个java类
- 继承UDF类
- 重写evaluate方法
- 打包类所在项目成一个all-in-one的jar包并上传到hive所在机器
- 在hive中执行add jar操作,将jar加载到classpath中。
- 在hive中创建模板函数,使得后边可以使用该函数名称调用实际的udf函数
- hive sql中像调用系统函数一样使用udf函数
代码示例:
- 获取用户的姓名,并把首字母转换为大写字母
def main(args: Array[String]): Unit = {// 创建上下文环境配置对象val conf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("SparkSQL")// 创建SparkSession对象val spark: SparkSession = SparkSession.builder().config(conf).getOrCreate()// 导包import spark.implicits._val rdd: RDD[(Int, String, String, Int)] = spark.sparkContext.makeRDD(List((1, "zhangsan", "man", 30),(2, "lisi", "woman", 40),(3, "wangwu", "man", 50)))val df: DataFrame = rdd.toDF("id", "name", "gender", "age")df.createOrReplaceTempView("user")// UDF函数使用 : 注册函数,并以匿名函数形式进行逻辑定义spark.udf.register("headUpper",(name:String) => {// head方法:获取头部信息// tail方法:获取尾部信息name.head.toUpper + name.tail})spark.sql("select headUpper(name) from user").show()// 释放资源spark.stop()}输出结果:+---------------+|headUpper(name)|+---------------+| Zhangsan|| Lisi|| Wangwu|+---------------+
UDAF
概念:
- User- Defined Aggregation Funcation;用户定义聚合函数,可对多行数据产生作用;
- 等同与SQL中常用的SUM(),AVG(),也是聚合函数 。
意义:
Input/Output要求-要解决的问题
- in:out=n:1,即接受输入N条记录当中的数据,同时返回一条处理结果。
- 属于最常见的自定义函数,像count,sum,avg,max等均是如此要求
实现步骤
- 自定义一个java类
- 继承UDAF类
- 内部定义一个静态类,实现UDAFEvaluator接口
- 实现方法init,iterate,terminatePartial,merge,terminate,共5个方法. 详见下图
- 在hive中执行add jar操作,将jar加载到classpath中。
- 在hive中创建模板函数,使得后边可以使用该函数名称调用实际的udf函数
- hive sql中像调用系统函数一样使用udaf函数
UDTF
概念:
User-Defined Table-Generating Functions
要解决一行输入多行输出的问题,问题的应用场景不少
用udtf解决一行输入多行输出的不多,往往被lateral view explode+udf等替代实现,比直> 接用udtf会更简单、直接一些
UDF UDAF UDTF 区别相关推荐
- Hive 之 用户自定义函数 UDF UDAF UDTF
一 什么是UDF UDF是UserDefined Function 用户自定义函数的缩写.Hive中除了原生提供的一些函数之外,如果还不能满足我们当前需求,我们可以自定义函数. 除了UDF 之外,我们 ...
- udf,udaf,udtf之间的区别
1.UDF:用户定义(普通)函数,只对单行数值产生作用: 继承UDF类,添加方法 evaluate() /*** @function 自定义UDF统计最小值* @author John**/publi ...
- hive的udf,udaf,udtf各自依賴兩種class(转载+分析整理)
Hive自定义函数包括三种UDF.UDAF.UDTF 名稱縮寫 特點 依賴 UDF(User-Defined-Function) 一进一出 org.apache.hadoop.hive.ql.exec ...
- Hive自定义UDF UDAF UDTF
Hive是一种构建在Hadoop上的数据仓库,Hive把SQL查询转换为一系列在Hadoop集群中运行的MapReduce作业,是MapReduce更高层次的抽象,不用编写具体的MapReduce方法 ...
- Hive 自定义函数编写(UDF,UDAF,UDTF)
Hive自带了一些函数,比如:max/min等,但是数量有限,自己可以通过自定义 UDF来方便的扩展. 当 Hive提供的内置函数无法满足你的业务处理需要时,此时就可以考虑使用用户自定义函数. 1. ...
- udf函数(udf udaf udtf)
UDF的定义 UDF(User-Defined Functions)即是用户定义的hive函数.hive自带的函数并不能完全满足业务需求,这时就需要我们自定义函数了 UDF的分类 UDF:one to ...
- Hive UDF GDF UDTF编写与实现
hive 自定义函数实现 UDF | GDF | UDTF 区别 UDF:一进一出(hive3 已经废除) GDF:一进一出(hive3 支持的GDF) UDTF:一进多出 业务前景 测试数据为:字符 ...
- Hive常用函数、列转行与行转列、开窗函数、UDF、UDTF
Hive函数.开窗函数.UDF.UDTF 1.系统内置函数 2.常用函数 2.1.关系运算 2.2.数值运算 2.3.条件函数 2.4.日期函数 2.5.字符串函数 2.6.Hive求WordCoun ...
- udf,udaf,udtf区别与联系
1.udf:user defined function:用户定义(普通)函数,只对单行数值产生作用:由于udf不做聚合,所以它可任意嵌套. 特点:input:output=1:1 实例函数:md5,s ...
最新文章
- Celery-分布式任务队列
- win32 数据类型 vs c#
- C语言高级编程:接续符‘\‘的用法
- java对docker_如何在docker中运行java程序
- 二叉树的深度和广度优先搜索算法
- 函数模板遇上函数重载
- C#l操作Exce知识点
- MyReport报表引擎2.7.4.0新功能
- XML To Linq 读取Sharepoint列表中的附件列信息
- VS中添加新项 数据选项卡下没有ADO.NET实体数据模型解决方案
- Greedy Mouse 贪心的耗子 nyoj824(贪心算法)
- Qt qlabel 设置字体、大小、加粗等
- 线性代数1.51.5Cramer法则/克莱姆法则
- JavaScript 闭包理解
- 计算机系统:系统级I/O
- android 微信浮窗实现_Android 悬浮窗功能的实现
- MacBook Pro 触摸板手势突然失效的解决方案
- 【转载】电磁波中的波段划分:L波段、S波段、C波段、X波段、Ku波段、K波段、Ka波段 等等
- linux图形加速驱动下载,Linux 安装emby 并开启nvidia nvenc 硬件加速转码
- 【大数据面试题】(一)Hadoop 相关面试题总结
热门文章
- 财务学python还是vba_作为一名会计应届生准备投身财务,想多学一门技能 是推荐python还是VBA或是其他什么 求指点一下?...
- python系列——多进程之进程池(pool)
- pcs for linux7下载,centos7上实现corosync V2 + pacemaker + pcs | crmsh备忘录
- 用牛顿迭代法求方程。
- leetcode 21.合并有序列表(js)
- _findnext()报错写入位置 0x000000000BE2A940 时发生访问冲突。
- 基恩士KV-N60主站,KV-N14从站,松下触摸屏
- 在Caffe的训练过程中打印验证集的预测结果
- 民航飞行学院计算机研究生就业,数据说话:文科硕士研究生就业变迁史
- js实现判断输入内容是否为数字