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 区别相关推荐

  1. Hive 之 用户自定义函数 UDF UDAF UDTF

    一 什么是UDF UDF是UserDefined Function 用户自定义函数的缩写.Hive中除了原生提供的一些函数之外,如果还不能满足我们当前需求,我们可以自定义函数. 除了UDF 之外,我们 ...

  2. udf,udaf,udtf之间的区别

    1.UDF:用户定义(普通)函数,只对单行数值产生作用: 继承UDF类,添加方法 evaluate() /*** @function 自定义UDF统计最小值* @author John**/publi ...

  3. hive的udf,udaf,udtf各自依賴兩種class(转载+分析整理)

    Hive自定义函数包括三种UDF.UDAF.UDTF 名稱縮寫 特點 依賴 UDF(User-Defined-Function) 一进一出 org.apache.hadoop.hive.ql.exec ...

  4. Hive自定义UDF UDAF UDTF

    Hive是一种构建在Hadoop上的数据仓库,Hive把SQL查询转换为一系列在Hadoop集群中运行的MapReduce作业,是MapReduce更高层次的抽象,不用编写具体的MapReduce方法 ...

  5. Hive 自定义函数编写(UDF,UDAF,UDTF)

    Hive自带了一些函数,比如:max/min等,但是数量有限,自己可以通过自定义 UDF来方便的扩展. 当 Hive提供的内置函数无法满足你的业务处理需要时,此时就可以考虑使用用户自定义函数. 1. ...

  6. udf函数(udf udaf udtf)

    UDF的定义 UDF(User-Defined Functions)即是用户定义的hive函数.hive自带的函数并不能完全满足业务需求,这时就需要我们自定义函数了 UDF的分类 UDF:one to ...

  7. Hive UDF GDF UDTF编写与实现

    hive 自定义函数实现 UDF | GDF | UDTF 区别 UDF:一进一出(hive3 已经废除) GDF:一进一出(hive3 支持的GDF) UDTF:一进多出 业务前景 测试数据为:字符 ...

  8. Hive常用函数、列转行与行转列、开窗函数、UDF、UDTF

    Hive函数.开窗函数.UDF.UDTF 1.系统内置函数 2.常用函数 2.1.关系运算 2.2.数值运算 2.3.条件函数 2.4.日期函数 2.5.字符串函数 2.6.Hive求WordCoun ...

  9. udf,udaf,udtf区别与联系

    1.udf:user defined function:用户定义(普通)函数,只对单行数值产生作用:由于udf不做聚合,所以它可任意嵌套. 特点:input:output=1:1 实例函数:md5,s ...

最新文章

  1. Celery-分布式任务队列
  2. win32 数据类型 vs c#
  3. C语言高级编程:接续符‘\‘的用法
  4. java对docker_如何在docker中运行java程序
  5. 二叉树的深度和广度优先搜索算法
  6. 函数模板遇上函数重载
  7. C#l操作Exce知识点
  8. MyReport报表引擎2.7.4.0新功能
  9. XML To Linq 读取Sharepoint列表中的附件列信息
  10. VS中添加新项 数据选项卡下没有ADO.NET实体数据模型解决方案
  11. Greedy Mouse 贪心的耗子 nyoj824(贪心算法)
  12. Qt qlabel 设置字体、大小、加粗等
  13. 线性代数1.51.5Cramer法则/克莱姆法则
  14. JavaScript 闭包理解
  15. 计算机系统:系统级I/O
  16. android 微信浮窗实现_Android 悬浮窗功能的实现
  17. MacBook Pro 触摸板手势突然失效的解决方案
  18. 【转载】电磁波中的波段划分:L波段、S波段、C波段、X波段、Ku波段、K波段、Ka波段 等等
  19. linux图形加速驱动下载,Linux 安装emby 并开启nvidia nvenc 硬件加速转码
  20. 【大数据面试题】(一)Hadoop 相关面试题总结

热门文章

  1. 财务学python还是vba_作为一名会计应届生准备投身财务,想多学一门技能 是推荐python还是VBA或是其他什么 求指点一下?...
  2. python系列——多进程之进程池(pool)
  3. pcs for linux7下载,centos7上实现corosync V2 + pacemaker + pcs | crmsh备忘录
  4. 用牛顿迭代法求方程。
  5. leetcode 21.合并有序列表(js)
  6. _findnext()报错写入位置 0x000000000BE2A940 时发生访问冲突。
  7. 基恩士KV-N60主站,KV-N14从站,松下触摸屏
  8. 在Caffe的训练过程中打印验证集的预测结果
  9. 民航飞行学院计算机研究生就业,数据说话:文科硕士研究生就业变迁史
  10. js实现判断输入内容是否为数字