摘要:
  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简记的更多相关文章

  1. Hive简记

    在大数据工作中难免遇到数据仓库(OLAP)架构,以及通过Hive SQL简化分布式计算的场景.所以想通过这篇博客对Hive使用有一个大致总结,希望道友多多指教! 摘要: 1.Hive安装 2.Hive ...

  2. SQL Server-聚焦在视图和UDF中使用SCHEMABINDING(二十六)

    前言 上一节我们讨论了视图中的一些限制以及建议等,这节我们讲讲关于在UDF和视图中使用SCHEMABINDING的问题,简短的内容,深入的理解,Always to review the basics. ...

  3. RangePartitioner 实现简记

    摘要: 1.背景 2.rangeBounds 上边界数组源码走读 3.RangePartitioner的sketch 源码走读 4.determineBounds 源码走读 5.关于RangePart ...

  4. MySql UDF 调用外部程序和系统命令

    1.mysql利用mysqludf的一个mysql插件可以实现调用外部程序和系统命令 下载lib_mysqludf_sys程序:https://github.com/mysqludf/lib_mysq ...

  5. Hive UDF初探

    1. 引言 在前一篇中,解决了Hive表中复杂数据结构平铺化以导入Kylin的问题,但是平铺之后计算广告日志的曝光PV是翻倍的,因为一个用户对应于多个标签.所以,为了计算曝光PV,我们得另外创建视图. ...

  6. sparksql udf的运用----scala及python版(2016年7月17日前完成)

    问:udf在sparksql 里面的作用是什么呢? 答:oracle的存储过程会有用到定义函数,那么现在udf就相当于一个在sparksql用到的函数定义: 第二个问题udf是怎么实现的呢? regi ...

  7. Hive UDF开发实例学习

    1. 本地环境配置 必须包含的一些包. http://blog.csdn.net/azhao_dn/article/details/6981115 2. 去重UDF实例 http://blog.csd ...

  8. 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 ...

  9. gearman mysql udf

    gearman安装 apt-get install gearman gearman-server libgearman-dev 配置bindip /etc/defalut/gearman-job-se ...

随机推荐

  1. 【HDU-6148】 Valley Numer(数位dp)

    百度之星2017复赛1005 HDU-6148 Valley Numer 题意 不出现上升后直接下降数位的数,不超过n的有几个.前导零不算. 题解 dfs(当前数位的位置len,这位的数num,是否在 ...

  2. JXOI 2018 简要题解

    目录 「JXOI2018」游戏 题意 题解 代码 「JXOI2018」守卫 题意 题解 代码 「JXOI2018」排序问题 题意 题解 代码 总结 「JXOI2018」游戏 题意 可怜公司有 \(n\ ...

  3. ALLOT流控设备操作手册指引

    ALLOT流控设备操作手册指引 1  简介 1.1 设备介绍 1.1.1 NetXploeer三层结构 Allot设备的管理如上图所示,采用三层结构. 1)NetEnforcer层,包括所有型号的Ne ...

  4. Write less code

    If you find yourself writing a lot of code to do something simple, you're probably doing it wrong. A ...

  5. <Android基础>(一)

    第一章Android 2003年10月,Andy Rubin等人创办了Android公司.2005年8月谷歌收购. 1.1 Android全貌 1.1.1 Android系统架构 1.Linux内核层 ...

  6. Permissions 0755 for '/home/lonecloud/.ssh/id_rsa' are too open.

    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: UNPROTECTED PRIVATE KEY FILE! ...

  7. QML-开发中遇到的错误收集

    作者:狐狸家的鱼 关于一个前端来做qml界面开发,不会写cpp又只能大概看懂意思,遇到的很多问题都不知道怎么解决而急得拔头发. 遇到的问题都是我这种菜鸟渣渣才会导致的问题,写下解决过程方便以后查看. ...

  8. php关联Apache和nginx

    编辑apache配置文件httpd.conf,以apache支持php vim /etc/httpd/httpd.conf添加如下二行 AddType application/x-httpd-php ...

  9. Java 多个文件压缩下载

    有时候会有多个附件一起下载的需求,这个时候最好就是打包下载了 首先下面这段代码是正常的单个下载 public void Download(@RequestParam("file_path&q ...

  10. 关于数据结构,剑指offer上面的

    我很喜欢那些javascript解决的编程题,感觉非常的有意思.我在博客园上面看到了一个同学的博客,他一共发了34篇剑指offer的编程题,还给出了非常详细的解答. 接下来的工作,我做的就是搬运工,不 ...