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

2023-12-22 19:58

本文主要是介绍HIVE udf、udaf、udtf函数定义与用法(最全!!!!!),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、定义

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

 

这篇关于HIVE udf、udaf、udtf函数定义与用法(最全!!!!!)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/525269

相关文章

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

Kotlin 作用域函数apply、let、run、with、also使用指南

《Kotlin作用域函数apply、let、run、with、also使用指南》在Kotlin开发中,作用域函数(ScopeFunctions)是一组能让代码更简洁、更函数式的高阶函数,本文将... 目录一、引言:为什么需要作用域函数?二、作用域函China编程数详解1. apply:对象配置的 “流式构建器”最

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

java之Objects.nonNull用法代码解读

《java之Objects.nonNull用法代码解读》:本文主要介绍java之Objects.nonNull用法代码,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录Java之Objects.nonwww.chinasem.cnNull用法代码Objects.nonN

Spring Boot结成MyBatis-Plus最全配置指南

《SpringBoot结成MyBatis-Plus最全配置指南》本文主要介绍了SpringBoot结成MyBatis-Plus最全配置指南,包括依赖引入、配置数据源、Mapper扫描、基本CRUD操... 目录前言详细操作一.创建项目并引入相关依赖二.配置数据源信息三.编写相关代码查zsRArly询数据库数

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

JavaScript Array.from及其相关用法详解(示例演示)

《JavaScriptArray.from及其相关用法详解(示例演示)》Array.from方法是ES6引入的一个静态方法,用于从类数组对象或可迭代对象创建一个新的数组实例,本文将详细介绍Array... 目录一、Array.from 方法概述1. 方法介绍2. 示例演示二、结合实际场景的使用1. 初始化二

一文带你了解SpringBoot中启动参数的各种用法

《一文带你了解SpringBoot中启动参数的各种用法》在使用SpringBoot开发应用时,我们通常需要根据不同的环境或特定需求调整启动参数,那么,SpringBoot提供了哪些方式来配置这些启动参... 目录一、启动参数的常见传递方式二、通过命令行参数传递启动参数三、使用 application.pro

C++中::SHCreateDirectoryEx函数使用方法

《C++中::SHCreateDirectoryEx函数使用方法》::SHCreateDirectoryEx用于创建多级目录,类似于mkdir-p命令,本文主要介绍了C++中::SHCreateDir... 目录1. 函数原型与依赖项2. 基本使用示例示例 1:创建单层目录示例 2:创建多级目录3. 关键注

关于@RequestParam的主要用法详解

《关于@RequestParam的主要用法详解》:本文主要介绍关于@RequestParam的主要用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 基本用法2. 默认值3. 可选参数4. 绑定到对象5. 绑定到集合或数组6. 绑定到 Map7. 处理复杂类