概念

UDF函数一共分为三种类型: ​

UDF-一进一出,给定一个参数,输出一个处理后的数据 ​UDAF-多进一出,属于聚合函数,类似于count、sum等函数 ​UDTF-一进多出,属于一个参数,返回一个列表作为结果

目的

当hive自定义函数无法满足需求时,就可以使用自定义函数

案例

导入依赖

<dependency><groupId>org.apache.hive</groupId><artifactId>hive-exec</artifactId><version>2.1.1</version>
</dependency>
自定义一个java类型,继承`UDF`类型
在自定义的类内部定义一个必须叫`evaluate`名的方法。
方法的形式参数的类型和个数,开发人员根据业务需求决定。

比如

public int evaluate();
public int evaluate(int a);
public double evaluate(int a, double b);
public String evaluate(String a, int b, Text c);
public Text evaluate(String a);
public String evaluate(List<Integer> a); (Note that Hive Arrays are represented as Lists in Hive. So an ARRAY<int> column would be passed in as a List<Integer>.)

编写一个自定义函数,比如小写转大写

import org.apache.hadoop.hive.ql.exec.UDF;public class getUpper extends UDF {public String evaluate(String str) {if (str == null || "".equals(str)) {throw new RuntimeException("传入的数据不符合要求");} else {return str.toUpperCase();}}public static void main(String[] args) {getUpper getUpper = new getUpper();System.out.println(getUpper.evaluate("abc"));}
}

利用maven进行打包,上传到服务器.如下

将jar包添加到hive的classpath中,在hive中执行如下命令

add jar /root/soft/Hive-1.0-SNAPSHOT.jar

创建一个自定义的临时函数名

create temporary function myUpper as 'getUpper';

通过show functions; 查看自定义的函数是否存在
使用自定义函数

select myUpper("aBc")

结果如下

UDF源码

public class UDF {/*** The resolver to use for method resolution.*/private UDFMethodResolver rslv;/*** The constructor.*/public UDF() {rslv = new DefaultUDFMethodResolver(this.getClass());}/*** The constructor with user-provided {@link UDFMethodResolver}.*/protected UDF(UDFMethodResolver rslv) {this.rslv = rslv;}/*** Sets the resolver.** @param rslv The method resolver to use for method resolution.*/public void setResolver(UDFMethodResolver rslv) {this.rslv = rslv;}/*** Get the method resolver.*/public UDFMethodResolver getResolver() {return rslv;}/*** This can be overridden to include JARs required by this UDF.** @see org.apache.hadoop.hive.ql.udf.generic.GenericUDF#getRequiredJars()*      GenericUDF.getRequiredJars()** @return an array of paths to files to include, {@code null} by default.*/public String[] getRequiredJars() {return null;}/*** This can be overridden to include files required by this UDF.** @see org.apache.hadoop.hive.ql.udf.generic.GenericUDF#getRequiredFiles()*      GenericUDF.getRequiredFiles()** @return an array of paths to files to include, {@code null} by default.*/public String[] getRequiredFiles() {return null;}
}

Hive自定义函数入门实例相关推荐

  1. 2021年大数据Hive(八):Hive自定义函数

    全网最详细的Hive文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 系列历史文章 前言 Hive自定义函数 一.概述 1.UDF(User-Define ...

  2. Hive 史上最全面的大数据学习第九篇(五) Hive 自定义函数 每一天都是美好的一天!

    Hive概述 & 安装方式详解 Hive表操作 Hive表分类 Hive Sql 操作 Hive 自定义函数 Hive On HBase 六.Hive 自定义函数 在Hive当中又系统自带的函 ...

  3. hive自定义函数-身份证号合法性判断

    hive自定义函数-身份证号合法性判断 简要 代码 简要 身份证号合法性判断: 若为18位身份证号: 1.第18位数字,应该在身份证号最后一位校验位数字中 2.前17为数字分别乘以对应的加权因子,累加 ...

  4. Hive 自定义函数UDF入门

    1.为什么要用自定义函数 1.1 hive的内置函数满足不了的业务需求,这时候就需要使用自定义函数 1.2 hive的自定义函数有那些 1.UDF  一对一输出输入(本章使用) 2.UDTF 一对多输 ...

  5. 深入学习《Programing Hive》:Hive自定义函数之UDF

    为了满足用户的个性化需求,Hive被设计成了一个很开放的系统,很多内容都可以定制,主要包括: 1).文件格式: 2).内存中的数据格式,如Hadoop的Writable/Text: 3).用户提供的M ...

  6. hive自定义函数UDF的使用方法

    虽然Hive已经提供了很多内置的函数,比如count().sum(),但是还是不能满足用户的需求,因此提供了自定义函数供用户自己开发函数来满足自己的需求.本实例通过编写自己的UDF,实现通过一个人的出 ...

  7. hive - 自定义函数(超详细步骤,手把手的交)

    用Java开发自定义函数,步骤: 1.eclipse上新建一个工程project(db2019): 2.导jar依赖包: db2019右键 --build path --configure... -- ...

  8. 案例解析丨Spark Hive自定义函数应用

    摘要:Spark目前支持UDF,UDTF,UDAF三种类型的自定义函数. 1. 简介 Spark目前支持UDF,UDTF,UDAF三种类型的自定义函数.UDF使用场景:输入一行,返回一个结果,一对一, ...

  9. Hive 自定义函数编写(UDF,UDAF,UDTF)

    Hive自带了一些函数,比如:max/min等,但是数量有限,自己可以通过自定义 UDF来方便的扩展. 当 Hive提供的内置函数无法满足你的业务处理需要时,此时就可以考虑使用用户自定义函数. 1. ...

最新文章

  1. PHP判断ajax请求:HTTP_X_REQUESTED_WITH
  2. 纯js制作的弹球游戏
  3. flask的日志输出current_app.logger.debug
  4. 【绝对有用】Server Tomcat v9.0 Server at localhost failed to start
  5. IOS CALayer的属性和使用
  6. Scala 知识点掌握1
  7. Nginx 反向代理、负载均衡、页面缓存、URL重写、读写分离及简单双机热备详解...
  8. mysql数据库基础知识--一分钟让你数据库入门(sql基础语法篇)
  9. Eclipse ADT安装慢解决方法
  10. 用Python实现黑客帝国代码雨效果
  11. PDF怎么转换成CAD?教你几步轻松掌握
  12. Xposed安装与使用
  13. leet198.打家劫舍
  14. 联想thinkbook16+ 2023款和2022款参数对比
  15. 3.卡券、直充订单详情(post 表单提交)
  16. 周六见 | PyCon China 2022 上海站就等你啦!
  17. Java语言GUI实现计算器
  18. 使用Python制作二维码生成软件
  19. HTML筑基知识点二
  20. Windows 10 安装python到U盘并设计自动添加环境变量脚本

热门文章

  1. Vue中如何正常使用锚点定位?
  2. android studio unable to save settings,记一些:Android Studio 安装-运行 异常及解决
  3. Arcgis10.2安装及LicensenManager10.2启动失败解决方法
  4. acm竞赛java很少_ACM比赛中JAVA的应用
  5. 年假计算器在线_死亡计算器 和 年龄计算器
  6. python培训周末线下班_现在学习Python2还是python3?老男孩Python线下班
  7. spring c3p0 mysql_spring boot整合mybatis使用c3p0数据源连接mysql
  8. 支持向量机smo matlab,理解支持向量机(三)SMO算法
  9. mysql5.7 json特性_mysql5.7新增加的JSON数据类型特征介绍
  10. rman一致性备份oracle数据库可以在非归档模式下么,探索ORACLE之RMAN_03一致性备份...