Hive 自定义函数 - Java和Python的详细实现

本文介绍了如何在Hive中实现自定义函数,包括使用Java和Python两种方式。Java实现涉及UDF和GenericUDF接口,Python实现则通过TRANSFORM关键字。在大数据量场景下,Java实现的性能优于Python,因为Python直接向操作系统申请资源而非YARN的ResourceManager。文章提供详细的步骤,从创建项目、编写代码到打包、上传、注册和调用自定义函数。
摘要由CSDN通过智能技术生成

一 写在前面

1 Hive的自定义函数(User-Defined Functions)分三类:

  • UDF:one to one,进一出一,row mapping。是row级别操作,类似upper、substr等
  • UDAF:many to one,进多出一,row mapping。是row级别操作,类似sum、min等
  • UDTF:one to many ,进一出多。类似:alteral view与explode实现的一行变多行

2 实现自定义函数有两种方式:

  • 通过jar包形式实现(java)
  • 通过Transform关键字实现(支持多种语言,一般用Python)

Transform关键字实现 与 jar包形式实现 在不同场景下的性能不同。数据量较小时,大多数场景下transform有优势,而数据量大时jar包有优势

在大数据量的场景下,Transform(Python)执行效率低的根本原因在于Python是直接向操作系统申请资源,而不是向YARN的ResourceManager申请资源,故而导致节点的资源无法高效组织和被利用。所以,不要轻易使用transform

接下来写一个统计统计字段长度的自定义函数

二 JAVA实现

0、基础信息

0.1 Hive有两个不同的接口编写UDF程序

一个是基础的UDF接口(org.apache.hadoop.hive.ql. exec.UDF) 可以处理基本类型的数据,如Text、IntWritable、LongWritable、DoubleWritable等

一个是复杂的GenericUDF接口(org.apache.hadoop.hive.ql.udf.generic.GenericUDF)可以处理Map、List、Set类型的数据

0.2 org.apache.hadoop.hive.ql. exec.UDF

 只需要继承udf,然后实现evaluate()方法就行了

0.3 org.apache.hadoop.hive.ql.udf.generic.GenericUDF

至少需要实现以下三个方法

public ObjectInspector initialize(ObjectInspec
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值