hive--udf函数(开发-4种加载方式)
UDF函数开发
标准函数(UDF):以一行数据中的一列或者多列数据作为参数然后返回解雇欧式一个值的函数,同样也可以返回一个复杂的对象,例如array,map,struct。
聚合函数(UDAF):接受从零行到多行的零个到多个列,然后返回单一值。例如sum函数。
生成函数(UDTF):接受零个或者多个输入,然后产生多列或者多行输出。
udf函数开发
当Hive提供的内置函数无法满足你的业务处理需要时,此时就可以考虑使用用户自定义函数,用户自定义函数(user defined function),针对单条记录。编写一个UDF,需要继承UDF类,并实现evaluate()函数。在查询执行过程中,查询中对应的每个应用到这个函数的地方都会对这个类进行实例化。对于每行输入都会调用到evaluate()函数。而evaluate()函数处理的值会返回给Hive。同时用户是可以重载evaluate方法的。Hive会像Java的方法重载一样,自动选择匹配的方法。
准备数据:
littlebigdata.txt
edward capriolo,edward@media6degrees.com,2-12-1981,209.191.139.200,M,10 bob,bob@test.net,10-10-2004,10.10.10.1,M,50 sara connor,sara@sky.net,4-5-1974,64.64.5.1,F,2
创建表:
create table if not exists littlebigdata( name string, email string, bday string, ip string, gender string, anum int ) row format delimited fields terminated by ',';
加载数据:
load data local inpath 'littlebigdata.txt' into table littlebigdata;
代码示例:
import java.text.SimpleDateFormat; import java.util.Date; import org.apache.hadoop.hive.ql.exec.UDF; import org.junit.Test;public class UDFZodiacSign extends UDF {private SimpleDateFormat df ;public UDFZodiacSign() {df = new SimpleDateFormat("MM-dd-yyyy");}public String evaluate(Date bday){return evaluate(bday.getMonth(),bday.getDay());}public String evaluate(String bday){Date date =null;try{date = df.parse(bday);}catch(Exception ex){System.out.println("异常");ex.printStackTrace();return null; }return evaluate(date.getMonth()+1,date.getDay());}public String evaluate(Integer month,Integer day){if(month ==1){if(day<20){return "Capricorn";}else{return "Aquarius";}}if(month ==2){if(day<19){return "Capricorn";}else{return "Pisces";}}if(month ==3){if(day<20){return "Pisces";}else{return "Aries";}}if(month ==4){if(day<20){return "Aries";}else{return "Taurus";}}if(month ==5){if(day<20){return "Taurus";}else{return "Gemini";}}if(month ==6){if(day<21){return "Gemini";}else{return "Cancer";}}if(month ==7){if(day<22){return "Cancer";}else{return "Leo";}}if(month ==8){if(day<23){return "Leo";}else{return "Virgo";}}if(month ==9){if(day<22){return "Virgo";}else{return "Libra";}}if(month ==10){if(day<24){return "Libra";}else{return "Scorpio";}}if(month ==11){if(day<22){return "Scorpio";}else{return "Sagittarius";}}if(month ==12){if(day<22){return "Sagittarius";}else{return "Capricorn";}}return null;}@Testpublic void test() {UDFZodiacSign aa = new UDFZodiacSign();String str = aa.evaluate("01-10-2004");System.out.println(str);}}
udf代码示例
函数使用
加载:
add jar testUDF-0.0.1-SNAPSHOT.jar; create temporary function zodiac as "cn.rtmap.bigdata.hive.testUDF.udf.UDFZodiacSign";
查询:
select name,bday,zodiac(bday) from littlebigdata;
结果:
edward capriolo 2-12-1981 Capricorn bob 10-10-2004 Libra sara connor 4-5-1974 Aries
注意:这个地方可能有报错,反正我是遇到了!
解决办法:
UDF四种加载方式
第一种:
第二种:
<property> <name>hive.aux.jars.path</name> <value>file:///jarpath/all_new1.jar,file:///jarpath/all_new2.jar</value> </property>
第三种:
第四种:
转载于:https://www.cnblogs.com/chushiyaoyue/p/6632090.html
hive--udf函数(开发-4种加载方式)相关推荐
- 动态链接库dll的两种加载方式
在第一篇技术博客"动态链接库简介"中说到了两种加载方式,当时没有详细说明,这里详细说明一下 可以通过两种方式 1.隐式链接(需要.dll,.lib,.h) 2.显式链接(需要.dl ...
- ios首次加载web_IOS_IOS中UIWebView的使用详解,一、初始化与三种加载方式
UI - phpStudy...
IOS中UIWebView的使用详解 一.初始化与三种加载方式 UIWebView继承与UIView,因此,其初始化方法和一般的view一样,通过alloc和init进行初始化,其加载数据的方式有三种 ...
- Android图片加载之认识bitmap的四种加载方式
Android的Bitmap有四种高效加载方式 从获取方式分: (1)以文件流的方式 假设在sdcard下有 test.png图片 FileInputStream fis = new FileInpu ...
- 最新完整代码:使用word2vec预训练模型进行增量训练(两种保存方式对应的两种加载方式)适用gensim各种版本
两种方式加载预训练模型(保存方式不一样,加载方式也不一样) 以腾讯训练的100为word2vec small版本为例 word2vec预训练模型下载 腾讯:https://ai.tencent.com ...
- MyBatis 延迟加载的三种加载方式深入,你get了吗?
延迟加载 延迟加载对主对象都是直接加载,只有对关联对象是延迟加载. 延迟加载可以减轻数据库的压力, 延迟加载不可是一条SQL查询多表信息,这样构不成延迟加载,会形成直接加载. 延迟加载分为三种类型: ...
- 百度地图API的两种加载方式
1. 同步加载 直接在页面中使用script标签,引入api地址即可,如下: <script src="http://api.map.baidu.com/api?v=2.0&a ...
- HBase协处理器三种加载方式
一.协处理器简介 HBase协助处理器允许用户将部分逻辑在数据存放端即 HBase RegionServer 服务端进行计算,也即允许用户在 RegionServer 运行用户自定义的代码.这相当于是 ...
- C语言startup()函数,WSAStartup()函数以及DLL的加载
本节讲解 Windows 下 DLL 的加载,学习 Linux Socket 的读者可以跳过. WinSock(Windows Socket)编程依赖于系统提供的动态链接库(DLL),有两个版本: 较 ...
- Entity Framework关联实体的三种加载方法
推荐文章 EF性能之关联加载 总结很好 一:介绍三种加载方式 Entity Framework作为一个优秀的ORM框架,它使得操作数据库就像操作内存中的数据一样,但是这种抽象是有性能代价的,故鱼和熊掌 ...
最新文章
- CG-CTF-Web-文件包含
- oracle下lag和lead分析函数
- Python自定义类的成员并不一直是所有对象共享的
- LeetCode算法题-Delete Node in a Linked List(Java实现)
- Mysql基础之 事务
- Spring JPA 使用@CreatedDate、@CreatedBy、@LastModifiedDate、@LastModifiedBy 自动生成时间和修改者...
- Linux系统压缩解压缩
- 测试用例设计——正交实验法
- 家用风扇控制系统c语言程序设计,[信息与通信]家用风扇控制系统.doc
- 不知道rar压缩包密码可以解密么,rar压缩包有密码怎么解开?
- 全国计算机高新技术作用,全国计算机高新技术考试证书作用是什么?
- 外贸独立站和外贸电商平台优劣势分析
- Hi ! 哈希,Hash
- 你必须收藏的快速学习Autodesk最新编程接口的免费录像
- XUPT-ACM校赛心得
- [乐意黎原创]PHP抛PHP Startup:Unable to load dynamic library bcmath,Libmcrypt,mhash,mcrypt等警告及模块动态安装详解
- js实现幻灯片轮播图
- ios开发---音乐播放器之怎么获取音乐列表
- 树莓派4B搜不到5G WiFi ???
- 使用Matlab软件对NDVI进行最大值合成