UDF简记
摘要:
1.开发UDF
2.开发UDAF
3.开发UDTF
4.部署与测试
5.一个简单的实例
内容:
1.开发UDF
函数类需要继承org.apache.hadoop.hive.ql.UDF 实现evaluate函数
2.开发UDAF
函数类需要继承UDAF类,内部类Evaluator实UDAFEvaluator接口。 Evaluator需要实现 init、iterate、terminatePartial、merge、terminate这几个函数 init函数实现接口UDAFEvaluator的init函数。 iterate接收传入的参数,并进行内部的轮转。其返回类型为boolean。 terminatePartial无参数,其为iterate函数轮转结束后,返回轮转数据,terminatePartial类似于hadoop的Combiner。 merge接收terminatePartial的返回结果,进行数据merge操作,其返回类型为boolean。 terminate返回最终的聚集函数结果。
3.开发UDTF
函数类需要继承org.apache.hadoop.hive.ql.udf.generic.GenericUDTF 实现initialize, process, close三个方法。 initialize方法返回UDTF的返回行的信息(返回个数,类型) process方法对传入的参数进行处理,可以通过forword()方法把结果返回 close()方法需要清理的方法进行清理
4.部署与测试
打包上传到HDFS hadoop fs -put my-udf.jar /hive_functions
hive>add jar hdfs://namenode_host:8020/hive_functions/my-udf.jar;
hive>create temporary function parse_json_array as 'hive.udf.yourUDF';
5.一个简单的实例(github地址)
import org.apache.commons.lang.StringUtils;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONTokener; import java.util.ArrayList; /**
* Created by arachis on 2017/10/19.
* 一个简单的UDF:
* 解析json array中的指定字段,并用下划线拼接起来
*/
public class MyUDF extends UDF {
/**
* 把json array字符串中指定的字段解析出来
* @param jsonArrayStr 要解析的json array字符串
* @param column 要提取的字段
* @return str
*
* hive example:
* hive>select *,parse_json_array(get_json_object('{"data":[{"id":1082},{"id":1082},{"id":1082}]}','$.data'),'id') from dual;
* hive>+-----------+-----------------+--+
| dual.foo | _c1 |
+-----------+-----------------+--+
| NULL | 1082_1082_1082 |
+-----------+-----------------+--+
*/
public String evaluate(String jsonArrayStr,String column) {
if((jsonArrayStr==null)|| StringUtils.isBlank(jsonArrayStr)||! jsonArrayStr.trim().startsWith("[")){
return null;
}
JSONArray jsonArray = null;
ArrayList<String> tag_ids = new ArrayList<String>();
try {
jsonArray = new JSONArray(new JSONTokener(jsonArrayStr));
for(int i=0;i<jsonArray.length();i++){
String json = jsonArray.getJSONObject(i).get(column).toString();
tag_ids.add( json );
}
} catch (JSONException e) {
e.printStackTrace();
} return StringUtils.join( tag_ids,'_' );
} public static void main(String[] args) {
String jas = "[{\"id\":1082},{\"id\":1082},{\"id\":1082}]";
System.out.println(new MyUDF().evaluate(jas,"id") ); }
UDF简记的更多相关文章
- Hive简记
在大数据工作中难免遇到数据仓库(OLAP)架构,以及通过Hive SQL简化分布式计算的场景.所以想通过这篇博客对Hive使用有一个大致总结,希望道友多多指教! 摘要: 1.Hive安装 2.Hive ...
- SQL Server-聚焦在视图和UDF中使用SCHEMABINDING(二十六)
前言 上一节我们讨论了视图中的一些限制以及建议等,这节我们讲讲关于在UDF和视图中使用SCHEMABINDING的问题,简短的内容,深入的理解,Always to review the basics. ...
- RangePartitioner 实现简记
摘要: 1.背景 2.rangeBounds 上边界数组源码走读 3.RangePartitioner的sketch 源码走读 4.determineBounds 源码走读 5.关于RangePart ...
- MySql UDF 调用外部程序和系统命令
1.mysql利用mysqludf的一个mysql插件可以实现调用外部程序和系统命令 下载lib_mysqludf_sys程序:https://github.com/mysqludf/lib_mysq ...
- Hive UDF初探
1. 引言 在前一篇中,解决了Hive表中复杂数据结构平铺化以导入Kylin的问题,但是平铺之后计算广告日志的曝光PV是翻倍的,因为一个用户对应于多个标签.所以,为了计算曝光PV,我们得另外创建视图. ...
- sparksql udf的运用----scala及python版(2016年7月17日前完成)
问:udf在sparksql 里面的作用是什么呢? 答:oracle的存储过程会有用到定义函数,那么现在udf就相当于一个在sparksql用到的函数定义: 第二个问题udf是怎么实现的呢? regi ...
- Hive UDF开发实例学习
1. 本地环境配置 必须包含的一些包. http://blog.csdn.net/azhao_dn/article/details/6981115 2. 去重UDF实例 http://blog.csd ...
- Adding New Functions to MySQL(User-Defined Function Interface UDF、Native Function)
catalog . How to Add New Functions to MySQL . Features of the User-Defined Function Interface . User ...
- gearman mysql udf
gearman安装 apt-get install gearman gearman-server libgearman-dev 配置bindip /etc/defalut/gearman-job-se ...
随机推荐
- codevs 2606 约数和(分块优化数学公式 )
题目背景 Smart最近沉迷于对约数的研究中. 题目描述 对于一个数X,函数f(X)表示X所有约数的和.例如:f(6)=1+2+3+6=12.对于一个X,Smart可以很快的算出f(X).现在的问题是 ...
- 通过WebChannel/WebSockets与QML中的HTML交互
来源:通过WebChannel/WebSockets与QML中的HTML交互 GitHub:八至 作者:狐狸家的鱼 本文链接:QML与HTML交互 在查询QML与HTML之间通信交互时资料很少,这篇文 ...
- Arch Linux中安装Anaconda
安装步骤 通过AUR安装yaourt -S anaconda 激活Anaconda环境source /opt/anaconda/bin/activate root 关闭Anaconda环境source ...
- bzoj3467: Crash和陶陶的游戏
就一篇题解: BZOJ3467 : Crash和陶陶的游戏 - weixin_34248487的博客 - CSDN博客 1.离线,建出Atrie树:B树的倍增哈希数组,节点按照到根路径字典序排序 2. ...
- bzoj2553 禁忌
题目链接 题意 给出一个\(n\)个字符串的字典.对于一个字符串,他的贡献是这个字符串中最多的在字典中出现的不重叠子串的数量. 然后问一个长度为\(len\)的,字符集为前\(alphabet\)个字 ...
- Django(十)COOKIE和session
https://www.cnblogs.com/haiyan123/p/7763169.html from django.shortcuts import render,redirect # Crea ...
- 第三十四篇-Palette(调色板)的使用
由于屏幕录制图片转换关系,不甚清晰,还是附上效果图 可以看出,上面文字和背景颜色确实会根据图片的变化而变化. 里面有3个组件,toolbar,textview,imageview,其中textview ...
- OmniPlan,一款让你无法自拔的项目管理工具(仅适用于MAC系统)
OmniPlan 大家都知道Windows系统可以使用project来方便的管理跟踪项目的各项任务,那么Mac系统有没有这样专业级的项目管理软件了?答案是有,今天给大家推荐的Mac系统下的项目管理 ...
- apache thrift分析
thrift是一个用来实现跨语言的远程调用(RPC Remote Procedure Call)的软件框架.根据接口定义语言(IDL Interface definition lanuage) 并借助 ...
- libmysqlclient.so.18: cannot open shared object file
libmysqlclient.so.18: cannot open shared object file 解决libmysqlclient.so.18: cannot open shared obje ...