hive自定义函数开发与部署

在利用Hive或者Spark-sql进行数据分析任务时,经常会遇到一些Mysql等传统数据库中有的函数而hive中没有,或者需要自己定义一些复杂的字符串处理、复杂计算计算逻辑的时候,找不到可以用的Hive函数时。尽管可以编写一些map-reduce等程序来向集群提交任务,但毕竟不如操作SQL来爽快。为此,hiveSpark-sql都提供了一些接口类,我们基本这些接口类可以定义自己的Hive函数,并在SQL语句中使用

在此,简单的总结一下hive自定义函数的类型、编写、部署等内容 
Hive自定义函数: 
Hive
自定义函数包括3中类型UDFUDAFUDTF,下面做一个简单的开发介绍。

UDF(user-defined function),普通的用户自定义函数,接受单行输入并产生单行输出。如字符串的大写转小写就输入这一类型。 

编写UDF需要继承UDF类、并实现evaluate()方法 

https://i-blog.csdnimg.cn/blog_migrate/f59bd7cdda517fd45f8daa5de9f51758.png

UDAFUser-defined aggregate function:用户自定义聚合函数、接受多行输入并产生单行输出,如maxmin都输入这一类。 

编写UDAF稍微复杂一点,需要继承UDAF类,内部类实现UDAFEvaluator接口,实现 init()方法 完成参数的初始化,实现iterate()方法 接受输入,并进行内部轮转,实现terminatePartial()方法 返回子区域聚合结果,实现nerge()方法完成子区域结果的合并,实现terminate()返回最终聚合结果。

UDTF(User-defined table-generating function):用户自定义表生成函数,接受单行输入并产生多行输出。 
继承org.apache.hadoop.hive.ql.udf.generic.GenericUDTF 
实现initialize, process, close三个方法 
UDTF首先会调用initialize方法,此方法返回UDTF的返回行的信息(返回个数,类型)。初始化完成后,会调用process方法,对传入的参数进行处理,可以通过forword()方法把结果返回。最后close()方法调用,对需要清理的方法进行清理。 
写的一个用来切分”key:value;key:value;”这种字符串,返回结果为key, value两个字段 

https://i-blog.csdnimg.cn/blog_migrate/b5341a92cb272c04d320eee53352e2a1.png

Hive用户自定义函数的提交部署: 
编写好的UDFUDAFUDTF编译为jar包之后,需要提交给hive才能使用。提交包括3个过程:

  1. 通过命令行提交jar包: hive –auxpath /path/to/hive-examples.jar
  2. 注册临时函数: CREATE TEMPORARY FUNCTION maximum AS ‘Maximum’
  3. 使用自定义函数:select maximum(score) from score_table group by studentId

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值