HIVE udf、udaf、udtf函数定义与用法(最全!!!!!)

article/2025/9/27 1:53:10

一、定义

1、hive udf、udaf、udtf函数定义与用法

(1)UDF(user-defined function)作用于单个数据行,产生一个数据行作为输出。(数学函数,字符串函数)

(2)UDAF(用户定义聚集函数 User- Defined Aggregation Funcation):接收多个输入数据行,并产生一个输出数据行。(count,max)

(3)UDTF(表格生成函数 User-Defined Table Functions):接收一行输入,输出(explode)

总结:

UDF:返回对应值,一对一  

UDAF:返回聚类值,多对一

UDTF:返回拆分值,一对多

参考链接:

  1. https://help.aliyun.com/document_detail/73359.html?spm=a2c4g.11186623.2.13.2b8a2cd5LReBVx#section-ipk-thf-xdb
  2. http://www.singlex.net/3442.html?kozafo=i5er4

 

二、在odps的实际应用(以python为例)

1、Odps写udf和调用实例

参考链接:https://blog.csdn.net/Andy_shenzl/article/details/106328896

第一步:使用python代码创建udf

具体代码:
#pyton写udf实例
from odps.udf import annotate@annotate("*->bigint")  #虽然这边可以转换格式,但是最好在python代码里还是再次转化下class udf_test_tyq(object):def evaluate(self, sms_text):sms_text = int(sms_text)if sms_text >100 :return sms_text/20return  sms_text +1

第二步:新建函数:需要与第一步的udf函数名对应

 

第三步:调用udf

注意:需要在同一空间调用

 

2、Odps写udaf和调用实例

生成顺序和方法与udf一致,只有生成代码不一致。

结果:

# -*- coding: utf-8 -*-
from odps.udf import annotate
from odps.udf import BaseUDAF@annotate('*->string')  #输入的格式->输出的格式
class UdafTestTyq(BaseUDAF):def new_buffer(self):return []  #返回一个需要生成的格式,这里返回一个空列表,表示下面最终的值返回是一个列表形式,同时中间处理过程中的buffer都是一个列表格式。def iterate(self, buffer, value):if value is not None:buffer.append(value)   #根据python列表的用法写def merge(self, buffer, pbuffer):#相当于reduce过程,简单理解为如果是列表,即将多个列表合并成一个列表即可,buffer始终是最终要输出的,所以最后全部写在buffer中,合并的用法只要正常根据python列表合并的方法即可for p in pbuffer:buffer.append(p)def terminate(self, buffer):return  ",".join(buffer)  #转换为字符串,因为上述annotate定义输出为string格式#---以下为列表中放字典的例子
#import json
#class UdafTestTyq(BaseUDAF):#def new_buffer(self):#return []#def iterate(self, buffer, value):#if value is not None:#buffer.append(json.loads(value))#def merge(self, buffer, pbuffer):#for p in pbuffer:#buffer.append(p)#def terminate(self, buffer):#return json.dumps(buffer ,ensure_ascii=False)#---以下为生成字典的例子
#class JsonUdaf(BaseUDAF):#def new_buffer(self):#return {}#def iterate(self, buffer, key, value):#if key is not None:#buffer[key] = value#def merge(self, buffer, pbuffer):#buffer.update(pbuffer)#def terminate(self, buffer):#return json.dumps(buffer ,ensure_ascii=False)

 

3、Odps写udtf和调用实例

生成顺序和方法与udf一致,只有生成代码不一致。

调用方法:

注意!!udtf的调用方法和其他两个不太一样。

UDTF有两种使用方法,一种直接放到select后面,一种和lateral view一起使用。(UDTF不可以添加其他字段使用,不可以嵌套调用,不可以和group by/cluster by/distribute by/sort by一起使用)

(1)直接放在select 后面实例:

(2)和lateral view一起使用实例:

用lateral view 可以带上其他的字段,更符合实际应用场景。

结果:截图为同一个deviceid

 


http://chatgpt.dhexx.cn/article/ArylsaG0.shtml

相关文章

udf,udaf,udtf之间的区别

1、UDF:用户定义(普通)函数,只对单行数值产生作用; 继承UDF类,添加方法 evaluate() /*** function 自定义UDF统计最小值* author John**/public class Min extends UDF {public Double evaluate(Double a…

如何编写udf函数(收藏篇)

hive自带了一些函数,比如:max、min 等,但是自带的函数数量有限,所以hive提供给用户自定义函数的功能。 udf 函数可以直接应用于select 语句,对查询结构做格式化处理之后,然后再输出内容。 下面将详细介绍下…

自定义UDF函数

自定义函数案例: 文章目录 自定义UDF函数1.需求2.前期maven工程准备3.编程实现4.导包5.导入hive中 自定义UDTF函数1.需求2.编程实现3.导入hive中 自定义UDF函数 1.需求 自定义一个UDF实现计算给定字符串的长度例如 2.前期maven工程准备 创建一个maven工程&#x…

Hive自定义UDF函数详解

Hive自定义UDF函数详解 一、UDF概述二、UDF种类三、如何自定义UDF四、自定义实现UDF和UDTF4.1 需求4.2 项目pom文件4.3 Hive建表测试及数据4.4 UDF函数编写4.5 UDTF函数编写4.6 UDTF使用 一、UDF概述 UDF全称:User-Defined Functions,即用户自定义函数&…

Hive UDF简单函数

概念 在Hive中,用户可以自定义一些函数,用于扩展HiveQL的功能,而这类函数叫做UDF(用户自定义函数)。UDF分为两大类:UDAF(用户自定义聚合函数)和UDTF(用户自定义表生成函数)。  UDF…

大数据Hive篇--UDF函数

什么是UDF: 它是User defined Function的简写,意思是用户自定义方法 为什么要用UDF? hive自带了一些函数,比如:max、min 等,但是自带的函数数量有限,所以hive提供给用户自定义函数的功能。 udf 函数可以…

《C#入门详解》刘铁猛——Lesson20-21事件

其实事件一般就是在界面程序中应用,所以这里讲的不如WPF这种的实用。

《C#入门详解》刘铁猛——Lesson1-2 IDE、各种应用程序

编程学习路径:语言——类库——框架 参考资料:离线MSDN文档,C#语言定义文档,推荐书籍—C# in a nutshell;其中,C#语言定义文档知识点会串的比较多,不建议详读。 使用MSDN:光标选中…

《C#入门详解》刘铁猛——Lesson8-9 方法的定义、调用与调试

方法命名:使用动词或者动词短语;使用PASCAL规则,即所有单词首字母大写。 静态类型的方法不是实例的方法,是类的方法,因此,实例不能调用静态方法,只能用类调用静态方法,示例程序如下&…

《C#入门详解》刘铁猛——Lesson17字段、属性、索引器、常量

属性代码示例: 以上代码演示了字段由get-set方法对演化成为属性的过程。 prop连敲两下Tab键,是属性声明的快捷键。 强调以下: 很少使用索引器。 声明和使用常量:

《C#入门详解》刘铁猛——Lesson27-28类的重写、多态、抽象类、开闭原则

重写、多态——子类对父类的纵向扩展,就是方法的版本升级。 override——重写,子类对父类成员的版本更新。 virtual——override 下面的例子就是多态——多态就是使用一个父类的变量引用一个子类的实例,当调用方法时,会顺着继承链…

《C#入门详解》刘铁猛——Lesson19委托

自定义委托类型: 模板方法实例: 回调方法示例: 多播委托示例: 同步调用(串行,单线程)示例: 多播委托也是同步调用: 隐式的异步调用示例: 执行结果发生了资源…

《C#入门详解》刘铁猛——Lesson18传值\输出\引用\数组\具名\可选参数、扩展方法

x是101,y是100 在声明函数的时候带有默认值。 静态函数,第一个参数加this修饰符,就是一个扩展方法。调用的时候可以看见向下的小箭头。

刘铁猛C#语言入门详解——学习笔记014、15、16(2)

using System; using System.Collections.Generic; namespace ConsoleApp2 {class Program{static void Main(string[] args){//c#语言对表达式的定义:a sequence of one or more operands and zero or more operators can be evaluated to a single value object m…

《深入浅出WPF》-刘铁猛学习笔记——XAML

这里有个目录 XAML是什么?导人程序集和引用其中的名称空间XAML的树型结构Attribute (特性、标记、属性)Property (属性)属性赋值字符串赋值使用属性元素( Property Element)进行复杂赋值 XAML 注释后记 XAML是什么? XAML是微软公司创造的一种开发语言&a…

《C#入门详解》刘铁猛——Lesson31泛型、partial类、枚举、结构体

泛型类如下: 泛型接口,太常用了,如下: 实现这个泛型接口的类,也是泛型类,如下: 数据结构,基本上都是泛型的。 方法也可以是泛型的,而且泛型方法更常用,泛型方…

《C#入门详解》刘铁猛——Lesson10-11-12 操作符

纵向往下走,优先级依次降低。 []操作符声明数组: typeof操作符的用法: var声明隐式类型变量: new操作符声明实例: delegate——委托,使用该操作符声明一个匿名方法的示例如下: delegate现在已过…

《C#入门详解》刘铁猛——Lesson22-23LINQ

事件是基于委托的,事件是对委托类型的包装,事件是语法糖,委托类型才是完整格式,保护委托类型不会被外部随便调用。 就像属性是基于字段的,属性是字段的包装,用于防止字段被外部乱用。 三年后的视频。。。 …

刘铁猛《C#语言入门详解》——委托详解

委托详解 事件 using System; using System.Threading;namespace ConsoleAPP1 {class Program{static void Main(string[] args){Customer customer = new Customer(); //s事件拥有者Waiter waiter = new Waiter(); //事件的响应者// += 事件的订阅 customer.Order 事件 …