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 ...
随机推荐
- Eslint检测出的问题如何自动修复
1. sublime 插件 eslintAutoFix 目前只试了windows下 真是大坑!如果你用了这个插件但不能自动修复,那就不要再用这个了!全网无解! 提示系统找不到指定的文件,各种路径加入系 ...
- ZJOI 2019 划水记
作为一个极其蒟蒻的OIer,虽然没有省选资格但还是去见见世面. ZJOI2019一试是在浙江省镇海中学.听名字就很霸气. 学习OI的最后一年,记录下一些事情,即使最终走到最后也一无所获,也是一段美好的 ...
- 【转】c语言中的#号和##号的作用
@2019-01-25 [小记] c语言中的#号和##号的作用
- 构建MFS分布式文件系统
++++++++++++++构建MFS分布式文件系统++++++++++++++PB级别:企业存储空间达到PB级别,即100万GB空间.(1PB=1000TB,1TB=1000GB,1GB=1000M ...
- cf455C Civilization (并查集)
并查集维护每个联通块的直径和最小的最大深度,每次连得时候连的肯定是最大深度最小的那两个点 #pragma GCC optimize(3) #include<bits/stdc++.h> # ...
- [ZJOI2015]地震后的幻想乡(期望+dp)
题目描述 傲娇少女幽香是一个很萌很萌的妹子,而且她非常非常地有爱心,很喜欢为幻想乡的人们做一些自己力所能及的事情来帮助他们. 这不,幻想乡突然发生了地震,所有的道路都崩塌了.现在的首要任务是尽快让幻想 ...
- Electron入门笔记(一)-自己快速搭建一个app demo
Electron学习-快速搭建app demo 作者: 狐狸家的鱼 Github: 八至 一.安装Node 1.从node官网下载 ,最好安装.msi后缀名的文件,新手可以查看安装教程进行安装. 2. ...
- iview 模态框点击确定按钮不消失
<div slot="footer"> <Button type="text" size="large" @click=& ...
- 【洛谷P2215】上升序列
题目大意:给定一个长度为 N 的序列,有 M 个询问,每个询问要求输出长度为 L 的上升子序列,若不存在,输出 impossible,若存在,输出下标字典序最小的一个. 题解:考虑到若 L 大于整个序 ...
- 全面理解虚拟DOM(1)
最近一两年前端最火的技术莫过于 reactjs,angularJS,vuejs,即便你没用过也可能听过,像ReactJS由业界顶尖的互联网公司facebook提出,其本身有很多先进的设计思路,比如页面 ...