Hive(15):自定义UDF

一、用户自定义函数分类

    1.UDF 用户自定义格式转化函数(一条数据输入,一条数据输出)
    2.udaf 用户自定义聚合函数(多条数据输入,一条数据输出)
    3.udtf 用户自定义**函数(一条数据输入,多条数据输出)

二、开发Java代码

1.添加pom依赖

   <dependency>  
      <groupId>org.apache.hadoop</groupId>  
      <artifactId>hadoop-client</artifactId>  
      <version>2.7.3</version>  
   </dependency> 
	<!-- https://mvnrepository.com/artifact/org.apache.hive/hive-exec -->
	<dependency>
	    <groupId>org.apache.hive</groupId>
	    <artifactId>hive-exec</artifactId>
	    <version>1.2.1</version>
	</dependency>
		<!-- Hive Client -->
	<dependency>
	    <groupId>org.apache.hive</groupId>
	    <artifactId>hive-jdbc</artifactId>
	    <version>1.2.1</version>
	</dependency>

2.java代码

package com.ibeifeng.hive.udf;

import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;

/**
 * 自定义函数
 */
public class TestHiveUDF_22 extends UDF {

	public Text evaluate(Text str,IntWritable flag){
		String value=str.toString();
		if(flag.get()==0){
			return new Text(value.toLowerCase());
		}else if(flag.get()==1) {
			return new Text(value.toUpperCase());
		}else {
			return new Text("flag参数异常");
		}
	
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println(new TestHiveUDF_22().evaluate(new Text("HAasd1OP"),new IntWritable(0)));
	}
}

3.Myeclipse打jar包

(1)选择制定类文件,右键-》Export    

(2)然后配置如下

(3)然后其他默认,finish结束

E:\Tools\WorkspaceforMyeclipse\JarPackage下面找到Hive_udf_2.jar

4.将自定义jar包与hive进行关联

(1)添加打的jar包

hive> add jar /opt/datas/Hive_udf_2.jar;
结果:
Added [/opt/datas/Hive_udf_2.jar] to class path
Added resources: [/opt/datas/Hive_udf_2.jar]

(2)创建函数方法

//在java文件中,右键自己的class名称,选择copy qualified Name获得路径'com.ibeifeng.hive.udf.TestHiveUDF_22',如下图

然后,创建函数

hive> create temporary function my_udf as 'com.ibeifeng.hive.udf.TestHiveUDF_22';

(3)使用

hive> select ename, my_udf(ename,0) low_ename from emp;
结果:
ename   low_ename
SMITH   smith
ALLEN   allen
WARD    ward
JONES   jones
MARTIN  martin
BLAKE   blake
CLARK   clark
SCOTT   scott
KING    king
TURNER  turner
ADAMS   adams
JAMES   james
FORD    ford
MILLER  miller

(4)创建永久udf

需要把jar包上传到hdfs上,然后就可以
-》上传

hive> dfs -put /opt/datas/Hive_udf_2.jar /;

-》加载

hive> create function my_udf_hdfs as 'com.ibeifeng.hive.udf.TestHiveUDF_22' using jar 'hdfs://bigdata.ibeifeng.com:8020/Hive_udf_2.jar';

-》关闭hive客户端
-》重新打开hive

bin/hive

-》运行

hive> select ename, my_udf_hdfs(ename,0) low_ename from emp;
成功:
ename   low_ename
SMITH   smith
ALLEN   allen
WARD    ward
JONES   jones
MARTIN  martin
BLAKE   blake
CLARK   clark
SCOTT   scott
KING    king
TURNER  turner
ADAMS   adams
JAMES   james
FORD    ford
MILLER  miller

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值