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

用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

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/475403.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 1053. 交换一次的先前排列

1. 题目 给你一个正整数的数组 A(其中的元素不一定完全不同),请你返回可在 一次交换(交换两数字 A[i] 和 A[j] 的位置)后得到的、按字典序排列小于 A 的 最大可能排列。 如果无法这么操作,就请返回原数组…

bootstrap 树形表格渲染慢_layUI之树状表格异步加载组件treetableAsync.js(基于treetable.js)...

概述后台框架中使用树状表格是非常常用的操作,layUI本身并没有这种组件。 第三方的treetable.js做到了完美的实现,但是不能实现在双击时异步加载数据,本文就是站在了巨人的肩膀上实现的异步加载的树状表格~1. 使用说明本组件基于treetable.js…

EchoServer

using System;using System.Net.Sockets;using System.IO;using System.Net; namespace ConsoleApplication1{ class EchoServer { public static void Main11() { // TcpListener监听端口1234 IPAddress ipAd IPAddress.Parse(&qu…

hive - 解析 json

内置函数:get_json_object(json串,解析路径) 解析路径说明: $ :跟对象 . :子对象 [] :数组下标 * :所有 举例: 数据样例: {"movie":"1190","rate":"4.8","timestamp":…

[scikit-learn 机器学习] 6. 逻辑回归

文章目录1. 逻辑回归二分类2. 垃圾邮件过滤2.1 性能指标2.2 准确率2.3 精准率、召回率2.4 F1值2.5 ROC、AUC3. 网格搜索调参4. 多类别分类5. 多标签分类5.1 多标签分类性能指标本文为 scikit-learn机器学习(第2版)学习笔记逻辑回归常用于分类任务 1. 逻…

libsvm回归参数寻优cgp_【lightgbm/xgboost/nn代码整理二】xgboost做二分类,多分类以及回归任务...

1.简介该部分是代码整理的第二部分,为了方便一些初学者调试代码,作者已将该部分代码打包成一个工程文件,包含简单的数据处理、xgboost配置、五折交叉训练和模型特征重要性打印四个部分。数据处理部分参考:代码整理一,这…

hive - 可优化的 10 个地方及详解

1.合理选择排序 排序算法比较耗资源,应根据业务需要选择 order by :全局排序,大数据集会消耗太过漫长的时间sort by:局部排序,只能保证每个reducer的输出数据都是有序的distribute by:分桶不排序,控制map…

[scikit-learn 机器学习] 7. 朴素贝叶斯

文章目录1. 朴素贝叶斯2. NB 与 逻辑回归对比本文为 scikit-learn机器学习(第2版)学习笔记相关知识参考:《统计学习方法》朴素贝叶斯法(Naive Bayes,NB) 1. 朴素贝叶斯 通过最大概率来预测类&#xff1a…

堕落的时候看看——清华大学老师的一席话

一双鞋,耐克的6百多;李宁的4百多;特步的3百多;361的2百多;所以,你毕业于一个什么样的大学很重要。 一双鞋,在地摊不过几十元,到了商场、专卖店,会涨到一百甚至几百。所以…

塔菲克蓝牙适配器驱动_小身材,大功能,biaze毕亚兹USB蓝牙适配器开箱体验

在日常生活中,我们平时使用的台式电脑或是笔记本电脑,想要传输数据或者音频的时候,都是需要借助数据传输线或是U盘等传输设备,使用过程可想而知,有点麻烦。我们都知道,手机是有蓝牙传输功能的,只…

MySQL - cast()函数

日常建表习惯用 create tabel tb_name as select......,这种建表方式的其中一个缺点就是:系统会根据查询出的字段,定义字段类型。有时候会把 %Y-%m-%d 格式的日期字段定义为 varchar 。建模的时候苦不堪言。 那么怎么在建表过程中自己定义每…

HDU1003——MAX SUM

简单DP&#xff0c;状态转移公式&#xff1a;num[j].data max{num[j].data, num[j].datanum[j-1].data}&#xff0c;也就是保证加上前一个数不失自己的值减小。 View Code #include <stdio.h>#define N 100010#define inf 9999999struct _num{int data;int pre;int nex…

[scikit-learn 机器学习] 8. 非线性分类和决策树

文章目录1. 特征选择标准2. 网页广告预测2.1 数量处理2.2 网格搜索模型参数3. 决策树优缺点本文为 scikit-learn机器学习&#xff08;第2版&#xff09;学习笔记相关知识&#xff1a;《统计学习方法》决策树&#xff08;Decision Tree&#xff0c;DT&#xff09; 1. 特征选择…

智慧新泰时空大数据与云平台_智慧警务大数据云平台开发情报研判系统解决方案...

智慧公安作为公安信息化开展到高级阶段的一种警务形态&#xff0c;“智慧公安”主要采用物联网、云计算、无线通讯、智能动态感知分析等新一代信息技术,将公安工作IT根底设备与物理设备、人际环境等高度交融,以提供智能化公安决策与效劳。智慧警务大数据云平台开发情报研判系统…

RGB颜色查询对照表#FFFFFF

大致是下图这样的&#xff0c;有需要的可以点击下面的连接复制使用&#xff1a; https://www.114la.com/other/rgb.htm

ikbc机械键盘打字出现重复_超小无线机械键盘,绝佳移动打字体验

NuType筹资信息产品名称NuType上线平台Kickstarter发起团队NUPHY发起地区中国香港目标金额80,000HKD筹集金额1,301,212HKD完全进度1,627%支持人数1,612最低价格697HKD上线时间2019/11/13-2019/12/28创次方/制表时间&#xff1a;2019年12月28日文/大智笔电键盘的打字体验远不及桌…

英语语法之形容词从句:定语从句

形容词从句:定语从句 限制和非限制性定语从句 ----------------------------------------------------------------------------- 限制和非限制性定语从句: 限制性定语从句是名词词组不可缺少的一个组成部分,去掉了会造成病句或意义不明确; 非限制性定语从句属于补充说明性质…

MySQL - 定时任务(每天凌晨1点、每小时、每分钟、某一时间点)

常用的一定要写在前面 # 从2019-10-11开始&#xff0c;每天的00:30:00执行定时任务 ON SCHEDULE EVERY 1 DAY STARTS 2019-10-11 00:30:00 # 每天的凌晨1点执行定时任务 ON SCHEDULE EVERY 1 DAY STARTS DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 1 DAY), INTERVAL 1 HOUR)# 特…

数据库中的null和c#中的null

再向数据库中插入数据时&#xff0c;如果插入c#中的null会报错&#xff0c;需要转换成SQl中的DBNull.Value public static object ToDbNull(object value) { if (value null || value.ToString() DateTime.MinValue.ToString()) { …

极光无限渗透测试面经_认识工业以太网及线缆测试

工业以太网由于其固有的可靠性、高性能和互操作性&#xff0c;已经渗透到工厂车间&#xff0c;成为自动化和控制系统的首选通信协议。近年&#xff0c;工业以太网的市场份额已经超过了传统的现场总线协议&#xff0c;总线协议通常需要多个独立和专有的布线设施。为了满足工业环…