博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hive中自定义函数
阅读量:6815 次
发布时间:2019-06-26

本文共 3046 字,大约阅读时间需要 10 分钟。

 

Hive的自定义的函数的步骤:

1°、自定义UDF extends org.apache.hadoop.hive.ql.exec.UDF

2°、需要实现evaluate函数,evaluate函数支持重载

3°、把程序打包放到目标机器上去

4°、进入hive客户端,添加jar包:hive>add jar jar路径

5°、创建临时函数:hive> create temporary function 自定义名称 AS '自定义UDF的全类名'

6°、执行HQL语句;

7°、销毁临时函数:hive> drop temporary function 自定义名称

在hive的hive-exec-1.0.0.jar中有如下结构(这是Hive中的内嵌函数的源码):

举一个例子:是<hive编程指南>中的一个经典案例.

统计显示生效和星座

输入日期显示字符串.

如果是0就显示生肖,如果是1就显示星座.

示例代码如下:

1 import java.sql.Date; 2 import java.text.SimpleDateFormat; 3 import java.util.Calendar; 4  5 import org.apache.hadoop.hive.ql.exec.UDF; 6 import org.apache.hadoop.io.Text; 7 import org.junit.Test; 8  9 public class UDFZodiacAndConstellation extends UDF {10     public Text evaluate(Date date, int type) {11         // 这个地方Date的类型是java.sql.Date,和数据库打交道的都是这个.12         // 还可以用DateWritable,这个类面封装了一个java.sql.Date类型.13         java.util.Date uDate = new java.util.Date(date.getTime());14         if (type == 0) {
// 生肖15 return new Text(getZodica(uDate));16 } else if (type == 1) {
// 星座17 return new Text(getConstellation(uDate));18 } else {19 return new Text("NULL");20 }21 }22 23 public final String[] zodiacArr = { "猴", "鸡", "狗", "猪", "鼠", "牛", "虎", "兔","龙", "蛇", "马", "羊" };24 public final String[] constellationArr = { "水瓶座", "双鱼座", "白羊座", "金牛座","双子座", "巨蟹座", "狮子座", "处女座", 25 "天秤座", "天蝎座", "射手座", "魔羯座" };26 public final int[] constellationEdgeDay = { 20, 19, 21, 21, 21, 22, 23, 23, 23, 23, 22, 22 };27 28 /**29 * 根据日期获取生肖30 */31 public String getZodica(java.util.Date date) {32 Calendar cal = Calendar.getInstance();33 cal.setTime(date);34 return zodiacArr[cal.get(Calendar.YEAR) % 12];35 }36 37 /**38 * 根据日期获取星座39 */40 public String getConstellation(java.util.Date date) {41 if (date == null) {42 return "";43 }44 Calendar cal = Calendar.getInstance();45 cal.setTime(date);46 int month = cal.get(Calendar.MONTH);47 int day = cal.get(Calendar.DAY_OF_MONTH);48 if (day < constellationEdgeDay[month]) {49 month = month - 1;50 }51 if (month >= 0) {52 return constellationArr[month];53 }54 // default to return 魔羯55 return constellationArr[11];56 }57 58 /**59 * 测试方法60 */61 @Test62 public void test() throws Exception {63 System.out.println(getConstellation(new SimpleDateFormat("yyyy-MM-dd").parse("2016-07-09")));64 System.out.println(getConstellation(new SimpleDateFormat("yyyy-MM-dd").parse("2016-07-31")));65 System.out.println(getZodica(new SimpleDateFormat("yyyy-MM-dd").parse("2016-07-31")));66 }67 }

然后对这个java文件打包放到Linux中,此处是放到了/usr/local/data/calc-cz.jar  

show functions 能够找到这个创建的cz函数.

查看该自定义函数的函数描述:

在jar源代码包中看关于hive内置year函数的源码:

可以仿照这个内置的函数在编写自定义hive函数的时候,定义函数的描述description.

year函数在hive中的描述

 

关于上面自定义的函数的在hive中的具体使用不再详述......

 

转载于:https://www.cnblogs.com/DreamDrive/p/5561113.html

你可能感兴趣的文章
我的友情链接
查看>>
【Linux】如何正确安装Tomcat
查看>>
010-电脑软件安装手册-20190418
查看>>
linux学习笔记四(shell编程二)
查看>>
Hbase Shell 基础和常用命令
查看>>
数据结构和算法
查看>>
Linux_haproxy(3)v1.0
查看>>
Linux HA Cluster高可用集群之HeartBeat2
查看>>
C#中使用GetCursorPos获取屏幕坐标
查看>>
我的友情链接
查看>>
flume bucketpath的bug一例
查看>>
2017八款最佳反勒索软件工具
查看>>
Cache Buffers LRU Chain 闩锁竞争
查看>>
oracle系统用户详解
查看>>
从优化业务流程谈信息化管理
查看>>
Android系统编译系统分析大全(二)
查看>>
git学习
查看>>
一篇笔记整理JVM工作原理
查看>>
ETL大数据测试介绍
查看>>
利用tar 通过网络拷贝数据
查看>>