栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Hive自定义函数

Hive自定义函数

一. UDF
  • IO要求-要解决的问题
  1. in:out=1:1,只能输入一条记录当中的数据,同时返回一条处理结果。
  2. 属于最常见的自定义函数,像cos,sin,substring,instr等均是如此要求。
  • 实现步骤(Java创建自定义UDF类)
  1. 自定义一个java类
  2. 继承UDF类
  3. 约定俗成的重写evaluate方法
  4. 打包类所在项目成一个all-in-one的jar包并上传到hive所在机器
  5. 在hive中执行add jar操作,将jar加载到classpath中。
  6. 在hive中创建模板函数,使得后边可以使用该函数名称调用实际的udf函数
  7. hive sql中像调用系统函数一样使用udf函数

布署步骤 

  • maven管理
  1. 
    	4.0.0
    	com.tianliangedu.course
    	TlHadoopCore
    	0.0.1-SNAPSHOT
    
    	
    	  UTF-8
    		UTF-8
    	
    	
    	
    		
    			nexus-aliyun
    			Nexus aliyun
    			http://maven.aliyun.com/nexus/content/groups/public
    		
    	
                    
    	
    		
    		
    			org.apache.hadoop
    			hadoop-client
    			2.7.4
    			provided
    		
                 
    		
    			org.apache.hive
    			hive-cli
    			1.2.1
    			provided
    		         
    	
    	
    		TlHadoopCore
    		
    			
    				maven-assembly-plugin
    				
    					
    						jar-with-dependencies
    					
    				
    				
    					
    						make-assembly
    						package
    						
    							assembly
    						
    					
    				
    			
    			
    				maven-compiler-plugin
    				2.3.2
    				
    					1.7
    					1.7
    					UTF-8
    				
    			
    		
    	
    
  • 上传jar包至hive操作环境中
  • 进入到自己的所操作的hive环境目录中。
  • 加载jar包、声明函数、使用函数
  • 将jar包加入hive 交互中 add jar /home/hive/tianliangedu_course/04_udf/TlHadoopCore-jar-with-dependencies.jar;
  • 声明函数 create temporary function mask as 'com.tianliangedu.hive.udf.ValueMaskUDF';
  • 使用函数   
二. UDAF
  1. in:out=n:1,即输入N条数据,返回一条处理结果,即列转行。
  2. 最常见的系统聚合函数,如count,sum,avg,max等
  • 实现步骤
  1. 自定义一个java类
  2. 继承UDAF类
  3. 内部定义一个静态类,实现UDAFevaluator接口
  4. 实现方法init,iterate,terminatePartial,merge,terminate共5个方法.

 

 

  • 在hive中执行add jar操作,将jar加载到classpath中。
  • 在hive中创建模板函数,使得后边可以使用该函数名称调用实际的udf函数
  • hive sql中像调用系统函数一样使用udaf函数
三. UDTF
  • 解决一行输入多行输出,即1:n,即行转列应用
  • 往往被lateral view explode+udf等替代实现,比直接用udtf会更简单、直接、更灵活一些
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/335625.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号