文章目录
前言
- 函数分类标准
**原生分类标准: 内置函数 和 用户定义函数(UDF,UDAF,UDTF)
分类标准扩大化: 本来,UDF 、UDAF、UDTF这3个标准是针对用户自定义函数分类的; 但是,现在可以将这个分类标准扩大到hive中所有的函数,包括内置函数和自定义函数;
目前hive三大标准UDF:(User-Defined-Function)普通函数: 特点是一进一出(输入一行数据输出一行数据) 举例: split
UDAF:(User-Defined Aggregation Function)聚合函数: 特点是多进一出(输入多行输出一行) 举例: count sum max min avg
UDTF:(User-Defined Table-Generating Functions)表生成函数: 特点是一进多出(输入一行输出多行) 举例: explode
查询所有hive函数名称: show functions;
查看某函数使用帮助文档: desc function [extended] 函数名; 注意: 加上extended关键字能查看详细信息示例**
1、编写UDF
- 首先,你需要创建一个新的Java类,继承自org.apache.hadoop.hive.ql.exec.UDF。在这个类中,你需要实现evaluate方法,该方法将处理函数的输入并返回结果。
packageudf;importorg.apache.hadoop.hive.ql.exec.UDF;importutils.ComputationUtil;/***
* 编写注册udf
* 两个经纬度计算距离udf
* */publicclass calDistance extendsUDF{publicdoubleevaluate(double lon,double lat,double lon1,double lon2){returnComputationUtil.getDistance(lon, lat, lon1, lon2);}}
- 导入依赖
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-exec</artifactId>
<version>3.1.3</version>
</dependency>
2、编译UDF
将项目编译成一个JAR文件。
3、创建和注册UDF
- 将编译好的JAR文件上传到hdfs目录。
hdfs dfs -put udf-cdh-1.0-SNAPSHOT-jar-with-dependencies.jar /user/cttic/udf/gps
- 使用CREATE FUNCTION命令创建并注册UDF。
-- 永久udf 函数创建CREATEFUNCTIONdefault.cal_distance AS'udf.calDistance'using jar 'hdfs://nameservice1:8020/user/cttic/udf/gps/udf-cdh-1.0-SNAPSHOT-jar-with-dependencies.jar';
- 这里的
udf.calDistance是你的类名,而using 'jar’指定了使用JAR文件。
5、使用UDF
selectdefault.cal_distance(121483800,31384000,121483800,31384200);
6、删除UDF函数
dropfunctiondefault.cal_distance;
总结
如果此篇文章有帮助到您, 希望打大佬们能
关注、
点赞、
收藏、
评论支持一波,非常感谢大家!
如果有不对的地方请指正!!!
参考1
版权归原作者 lfwh 所有, 如有侵权,请联系我们删除。