hive常见自定义函数有哪些


这篇文章主要介绍了hive常见自定义函数有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。hive的内置函数满足不了所有的业务需求。hive提供很多的模块可以自定义功能,比如:自定义函数、serde、输入输出格式等。00001.UDF:用户自定义函数,user defined function。一对一的输入输出。(最常用的)。00002.UDTF:用户自定义表生成函数。user defined table-generate function.一对多的输入输出。lateral view explode00003.UDAF:用户自定义聚合函数。user defined aggregate function。多对一的输入输出 count sum max。先在工程下新建一个pom.xml,加入以下maven的依赖包 请查看code/pom.xml定义UDF函数要注意下面几点:00001.继承org.apache.hadoop.hive.ql.exec.UDF00002.重写evaluate(),这个方法不是由接口定义的,因为它可接受的参数的个数,数据类型都是不确定的。Hive会检查UDF,看能否找到和函数调用相匹配的evaluate()方法publicclassFirstUDFextendsUDF{publicStringevaluate(Stringstr){Stringupper=null;//1、检查输入参数if(StringUtils.isEmpty(str)){}else{ 香港云主机upper=str.toUpperCase();}returnupper;}//调试自定义函数publicstaticvoidmain(String[]args){System.out.println(newfirstUDF().evaluate(“jiajingwen”));}}这种加载只对本session有效# 1、将编写的udf的jar包上传到服务器上,并且将jar包添加到hive的class path中# 进入到hive客户端,执行下面命令add jar /hivedata/udf.jar# 2、创建一个临时函数名,要跟上面hive在同一个session里面:create temporary function toUP as ‘com.qf.hive.FirstUDF’;3、检查函数是否创建成功show functions;4. 测试功能select toUp(‘abcdef’);5. 删除函数drop temporary function if exists tolow;(也是在本session有效,临时函数)1、将编写的udf的jar包上传到服务器上2、创建配置文件vi ./hive-initadd jar /hivedata/udf.jar;create temporary function toup as ‘com.qf.hive.FirstUDF’;# 3、启动hive的时候带上初始化文件:hive -i ./hive-initselect toup(‘abcdef’)通过配置文件方式这种只要用hive命令行启动都会加载函数1、将编写的udf的jar包上传到服务器上2、在hive的安装目录的bin目录下创建一个配置文件,文件名:.hivercvi ./bin/.hivercadd jar /hivedata/udf.jar;create temporary function toup as ‘com.qf.hive.FirstUDF’;3、启动hivehiveUDTF是一对多的输入输出,实现UDTF需要完成下面步骤00001.继承org.apache.hadoop.hive.ql.udf.generic.GenericUDF,00002.重写initlizer()、getdisplay()、evaluate()。执行流程如下:UDTF首先会调用initialize方法,此方法返回UDTF的返回行的信息(返回个数,类型)。初始化完成后,会调用process方法,真正的处理过程在process函数中,在process中,每一次forward()调用产生一行;如果产生多列可以将多个列的值放在一个数组中,然后将该数组传入到forward()函数。最后close()方法调用,对需要清理的方法进行清理。把”k1:v1;k2:v2;k3:v3″类似的的字符串解析成每一行多行,每一行按照key:value格式输出自定义函数如下:packagecom.qf.hive;publicclassParseMapUDTFextendsGenericUDTF{@Overridepublicvoidclose()throwsHiveException{}@OverridepublicStructObjectInspectorinitialize(ObjectInspector[]args)throwsUDFArgumentException{if(args.length!=1){thrownewUDFArgumentLengthException(” 只能传入一个参数”);}ArrayListString>fieldNameList=newArrayListString>();ArrayListObjectInspector>fieldOIs=newArrayListObjectInspector>();fieldNameList.add(“map”);fieldOIs.add(PrimitiveObjectInspectorFactory.javaStringObjectInspector);fieldNameList.add(“key”);fieldOIs.add(PrimitiveObjectInspectorFactory.javaStringObjectInspector);returnObjectInspectorFactory.getStandardStructObjectInspector(fieldNameList,fieldOIs);}@Overridepublicvoidprocess(Object[]args)throwsHiveException{Stringinput=args[0].toString();String[]paramString=input.split(“;”);for(inti=0;iparamString.length;i++){try{String[]result=paramString[i].split(“:”);forward(result);}catch(Exceptione){continue;}}}}对上述命令源文件打包为udf.jar,拷贝到服务器的/hivedata/目录在Hive客户端把udf.jar加入到hive中,如下:add jar /hivedata/udf.jar;在Hive客户端创建函数:createtemporaryfunctionparseMapas‘com.qf.hive.ParseMapUDTF’;# 创建一个临时函数parseMap# 查看函数是否加入showfunctions;selectparseMap(“name:zhang;age:30;address:shenzhen”)结果如下:#map key name zhangage 30address shenzhen用户自定义聚合函数。user defined aggregate function。多对一的输入输出 count sum max。定义一个UDAF需要如下步骤:00001.UDF自定义函数必须是org.apache.hadoop.hive.ql.exec.UDAF的子类,并且包含一个火哥多个嵌套的的实现了org.apache.hadoop.hive.ql.exec.UDAFEvaluator的静态类。00002.函数类需要继承UDAF类,内部类Evaluator实UDAFEvaluator接口。00003.Evaluator需要实现 init、iterate、terminatePartial、merge、terminate这几个函这几个函数作用如下:函数说明init实现接口UDAFEvaluator的init函数iterate每次对一个新值进行聚集计算都会调用,计算函数要根据计算的结果更新其内部状态terminatePartial无参数,其为iterate函数轮转结束后,返回轮转数据merge接收terminatePartial的返回结果,进行数据merge操作,其返回类型为boolean。terminate返回最终的聚集函数结果。计算一组整数的最大值packagecom.qf.hive;publicclassMaxValueUDAFextendsUDAF{publicstaticclassMaximumIntUDAFEvaluatorimplementsUDAFEvaluator{privateIntWritableresult;publicvoidinit(){result=null;}publicbooleaniterate(IntWritablevalue){if(value==null){returntrue;}if(result==null){result=newIntWritable(value.get());}else{result.set(Math.max(result.get(),value.get()));}returntrue;}publicIntWritableterminatePartial(){returnresult;}publicbooleanmerge(IntWritableother){returniterate(other);}publicIntWritableterminate(){returnresult;}}}对上述命令源文件打包为udf.jar,拷贝到服务器的/hivedata/目录在Hive客户端把udf.jar加入到hive中,如下:add jar /hivedata/udf.jar;在Hive客户端创建函数:createtemporaryfunctionmaxIntas‘com.qf.hive.MaxValueUDAF’;# 查看函数是否加入showfunctions;selectmaxInt(mgr)fromemp结果如下:#结果7902感谢你能够认真阅读完这篇文章,希望小编分享的“hive常见自定义函数有哪些”这篇文章对大家有帮助,同时也希望大家多多支持开发云,关注开发云行业资讯频道,更多相关知识等着你来学习!

相关推荐: scala高阶函数是什么

这篇文章主要讲解了“scala高阶函数是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“scala高阶函数是什么”吧!高阶函数是指使用其他函数作为参数、或者返回一个函数作为结果的函数。在Scala中函数是“一…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 09/14 12:47
Next 09/14 12:47

相关推荐