用Java开发自定义函数,步骤:

1.eclipse上新建一个工程project(db2019);

2.导jar依赖包:

db2019右键 --build path --configure...

--add library --user library --new(新建一个library(hive2.3.2_jar))

--add external jars(添加jar包) --认准路径,全选所有包(一般第一个不是)

--点OK --勾选hive2.3.2_jar --Finish --Apply --点OK

3.新建一个包package(com.ghgj.cn.udf):

--右键db2019下的src --new --package --输入name(com.ghgj.cn.udf) --Finish

4.定义一个类class(MyUdf):

--右键com.ghgj.cn.udf --new --class --输入name(MyUdf) --Finish

此时代码自动显示为:

package com.ghgj.cn.udf;

public calss MyUdf{

}

5.继承 UDF 这个类

--下载hive源码包:apache-hive-2.3.2-src.tar.gz

--解压源码包得到:apache-hive-2.3.2-src.tar

--再解压apache-hive-2.3.2-src.tar,得到文件:apache-hive-2.3.2-src

package com.ghgj.cn.udf;

public calss MyUdf extends UDF{

}

--选中UDF,在自动冒出来的所有选择中,选择是hive的(org.apache.hadoop.hive.ql.exec)

关联一下 UDF 和源码包 apache-hive-2.3.2-src:

--点击代码中的UDF --attach source

--选择external location --添加路径(external folder...)

--找到源码包 apache-hive-2.3.2-src --点确定 --点OK(然后等待两者关联)

生成一个UDF.class的类,这个类中告诉我们:

  • 新建的MyUdf类必须先继承这个类,即:public calss MyUdf extends UDF{}
  • 新建的MyUdf类可以实现一个或多个自定义函数evaluate()
  • 自定义函数evaluate()可以被hive调用

6.在eclipse中实现一个或多个自定义函数evaluate()

package com.ghgj.cn.udf; import org.apache.hadoop.hive.ql.exec.UDF; public calss MyUdf extends UDF{ //evaluate()括号中输入需要处理的字段,可以是一个或多个,并需要指定参数类型 //return的结果是什么类型,则evaluate()前就输入什么类型 private int evaluate(int age){ //年龄对3取余 int res = age%3; return res } private int evaluate(int a,int b){ //求和 return a+b } private String evaluate(String ip){ //将IP地址补全为三位数,便于比较 //65.727.2.9 补全为065.727.002.009 int res = age%3; String[] split = ip.split('\\.');#将IP根据.分割开,.需要转义 StringBuffer sb = new StringBuffer();#先创建一个空的StringBuffer类型的串 for(String s:split){ //逻辑:每一个数字前添加至少3个0,然后截取后三位 //65-->00065-->取后三位065 String tmp = '000' + s; #数字前添加0 //截取后3位,并在每个数字后面添加分隔符. sb.append(tmp.substring(tmp.length()-3)).append('.'); //去掉最后一个分隔符. resb = sb.toString().substring(0,sb.length()-1); } return resb } }

测试一下:

public static void main(String[] args) { MyUdf mu = new MyUdf(); System.out.printIn(mu.evaluate(5)); #测试第1个,5%3=2,输出2 System.out.printIn(mu.evaluate(5,3)); #测试第2个,5+3=8,输出8 System.out.printIn(mu.evaluate('65.727.2.9')); #测试第3个,输出065.727.002.009 }

hive上添加自定义函数,步骤:

1.打jar包

--右键com.ghgj.cn.udf --export...

--点击jar file --下一步

--展开db2019 --勾选com.ghgj.cn.udf

--修改jar file中的jar包的名称(myudf.jar) --Finish

2.将jar包上传到Linux

  1. [hadoop@hadoop01 ~]$ Alt+P #打开sftp
  2. sftp>
  3. 拖动jar包文件到SecureGRT对话框中
  4. [hadoop@hadoop01 ~]$ cd~
  5. [hadoop@hadoop01 ~]$ ls #查看列表中是否有myudf.jar

3.将jar包放在hive的classpath下

在hive客户端执行下面命令:add jar [jar包的路径]

hive> add jar /user/hadoop/myudf.jar;

结果:

added [/user/hadoop/myudf.jar] to class path

added resources:[/user/hadoop/myudf.jar]

表示命令执行成功,但是jar包不一定真的添加成功

检测jar包是否添加成功:

list jars;

若运行结果中有/user/hadoop/myudf.jar,代表添加成功

4.给自定义函数evaluate()添加别名,并在hive中注册这个函数

create temporary function my_fuc as 'com.ghgj.cn.udf.MyUdf';

temporary是临时的意思,代表hive当前客户端一旦关闭,my_fuc便失效;

as 后面跟的是主类名路径:

--eclipse中在代码中右击MyUdf --copy qualified name(则复制了MyUdf的全路径名)

5.查看hive的函数库中是否已添加自定义函数my_fuc

show functions;

内置函数有271个,若显示有272个,且能找到my_fuc,代表添加成功

注意:

  • 以上方式添加的函数是临时的函数,hive当前客户端一旦关闭,my_fuc便失效;
  • 若需要再次使用,则需要重复步骤3、4、5
  • 生产中一般也使用这种临时的方式,若需要变成永久函数,需要改源码,太麻烦不建议使用。

hive上使用自定义函数

my_fuc有多个evaluate()方法,通过函数名称evaluate和参数(参数个数和类型)可以确定调用的是哪个方法

hive>select my_fuc(4); # 4%3=1,输出1 hive>select my_fuc(4,3); # 4+3=7,输出7 hive>select my_fuc('1.234.11.7'); # 输出001.234.011.007

hive - 自定义函数(超详细步骤,手把手的交)相关推荐

  1. 三、Hive数据仓库应用之Hive数据操作语言(超详细步骤指导操作,WIN10,VMware Workstation 15.5 PRO,CentOS-6.7)

    Hive远程模式部署参考: 一.Hive数据仓库应用之Hive部署(超详细步骤指导操作,WIN10,VMware Workstation 15.5 PRO,CentOS-6.7) Hive数据定义语言 ...

  2. 四、Hive数据仓库应用之Hive数据查询语言(一)(超详细步骤指导操作,WIN10,VMware Workstation 15.5 PRO,CentOS-6.7)

    Hive远程模式部署参考: 一.Hive数据仓库应用之Hive部署(超详细步骤指导操作,WIN10,VMware Workstation 15.5 PRO,CentOS-6.7) Hive数据定义语言 ...

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

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

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

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

  5. 最全自建蚂蚁(leanote)笔记超详细步骤

    服务器(Windows系统)自建蚂蚁(leanote)笔记超详细步骤(包含数据备份和数据还原) 需要依赖(工具) 轻量服务器(云服务器)一台 -- 环境Windows Server 2019 Mong ...

  6. 超详细,手把手教你一次简单的SQL注入,不用任何工具,带你走进web安全的大门

    超详细,手把手教你一次简单的SQL注入,不用任何工具,带你走进web安全的大门 靶场网站,网站所有权在二向箔安全学院 知识盒子 简单的SQL注入题目,可以用来入门练习,体验一下实训 老套的题目:提取网 ...

  7. CDN+COS搭建图床超详细步骤

    CDN+COS搭建图床超详细步骤 一.前言 二.准备工作 1. 域名 2. DNS解析 三.原理解析 四.COS部署 1. 创建存储桶 2.创建文件夹 五.CDN部署 1.基础配置 2.源站配置 3. ...

  8. 大数据基础学习三:Ubuntu下安装VMware Tools超详细步骤及需要注意的问题(以ubuntu-18.04.3、Mware Workstation 15.1.0 Pro为例)

    大数据基础学习三:Ubuntu下安装VMware Tools超详细步骤及需要注意的问题 (以ubuntu-18.04.3.Mware Workstation 15.1.0 Pro for Window ...

  9. mysql连接idea详细教程_idea配置连接数据库的超详细步骤

    学习时,使用IDEA的时候,需要连接Database,连接时遇到了一些小问题,下面记录一下操作流程以及遇到的问题的解决方法. 一. 连接操作 简介:介绍如何创建连接,具体连接某个数据库的操作流程. 1 ...

  10. 苹果手机mov文件如何复制到电脑_如何在手机上访问电脑上的文件(超详细步骤) iPhone版...

    之前分享了如何在两台电脑上共享文件,如需访问可点击如下链接: Town-Tree:如何在两台电脑之间共享文件(超详细步骤)​zhuanlan.zhihu.com 如何在安卓手机上访问电脑上的文件,可点 ...

最新文章

  1. pandas pivot_table透视表、crosstab交叉表、aggfunc函数详解及实战
  2. dSploitzANTI渗透教程之启动zANTI工具
  3. linux 进程简介
  4. 反写规则-销售订单关闭后不允许出库 (销售订单-销售出库单)
  5. Codeforces Round #588 (Div. 2) D. Marcin and Training Camp 思维
  6. KubeCon 、 CloudNativeCon、Open Source Summit 2019三会交融,看点不断!
  7. c语言 sizeof typeof,typeof、nameof、sizeof的用法
  8. 接触网作业车司机许新峰的春运
  9. java的历史_Java的历史
  10. 人工智能系列:AI 可视化训练平台
  11. mysql预处理stmt_mysqli_stmt类:使用预处理语句处理SELECT查询结果
  12. 特异度(specificity)与灵敏度(sensitivity)
  13. 【大学分析】985只要国家线?华东师范大学考研情况如何?
  14. windows自带日语输入法快捷键
  15. 淘宝-没素质的商家给消费者加入禁购名单
  16. latex如何换页 一页放不下
  17. 计算机桌面图标不可以移动怎么调,电脑桌面图标不能随意拖动,怎么随意拖动桌面图标...
  18. 据说是新浪乐居的面试题及我的答案
  19. JZOJ5677. 【GDOI2018Day2模拟4.21】纽约
  20. Elasticsearch 中的 Guice

热门文章

  1. selenium-05-常见问题
  2. 捡起JavaScript(1)
  3. The Shapes of CSS
  4. 在辞职后的旅途中:我写了个App 创立了一家公司
  5. 面试官不讲武德,居然让我讲讲蠕虫和金丝雀!
  6. container_of宏
  7. docker 定时重启脚本_使用 Go 添加启动脚本
  8. mysql报错error2002_mysql中异常错误ERROR:2002的解决方法分享
  9. docker代理设置ssl证书_docker - 设置HTTP/HTTPS 代理
  10. 数据结构链表之双向链表:Python3 实现双向链表——2