科技资讯

Hive 自定义UDF函数的保姆级教程

发布日期:2023-07-08    点击次数:140

假如给你一个需求:

自定义一个udf实现计算给定字符串的长度

例如:

selectmy_len("abcd");4

详细实现步骤

1.首先创建一个maven工程

2.在xml文件中导入hive相关的依赖

org.apache.hivehive-exec3.1.2

3.创建一个自定义类MyUDF

importorg.apache.hadoop.hive.ql.exec.UDFArgumentException;importorg.apache.hadoop.hive.ql.metadata.HiveException;importorg.apache.hadoop.hive.ql.udf.generic.GenericUDF;importorg.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;importorg.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory;publicclassMyUDFextendsGenericUDF{//校验数据参数个数和类型等@OverridepublicObjectInspectorinitialize(ObjectInspector[]objectInspectors)throwsUDFArgumentException{if(objectInspectors.length!=1){thrownewUDFArgumentException("参数个数不为1");}returnPrimitiveObjectInspectorFactory.javaIntObjectInspector;}//处理数据@OverridepublicObjectevaluate(DeferredObject[]deferredObjects)throwsHiveException{//1.取出输入数据Stringinput=deferredObjects[0].toString;//2.判断输入数据是否为null,防止null指针异常if(input==null){return0;}//3.返回输入数据的长度returninput.length;}@OverridepublicStringgetDisplayString(String[]strings){return"";}}

4.打成jar包上传到服务器/opt/module/data/myudf.jar

5.将jar包添加到hive的classpath

hive>addjar/opt/module/data/myudf.jar

6.创建临时函数与开发好的Javaclass关联

hive>createtemporaryfunctionmy_lenas"com.bsk.hive.MyUDF";

7.在hql中使用自定义函数

hive>selectmy_len(name)name_lenfromtest;



上一篇:JavaScript 通过对键的引用获取对象的值
下一篇:科技周报: 抖音尝试扩张自营电商;传美团正在建立直播中台;淘宝直播上线新打赏功能