博客信息

Hive自定义UDF函数实现

发布时间:『 2017-05-04 19:50』  博客类别:Hadoop/Spark  阅读(1300) 评论(0)

Hive自定义UDF函数实现

使用UDF实现日期倒推30天,比如说当前日期为20170504,需要得到倒推30天的日期为20170404,格式为yyyyMMdd

第一步:实现代码并达成JAR包

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

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

/**
 * 日期倒推且设置格式
 *
 */
public final class UDFDateSubFormat extends UDF {

	private SimpleDateFormat dateFormat = new SimpleDateFormat();
	
	public Text evaluate(final Text s,final Integer days,final String format){
		dateFormat.applyPattern(format);
		if(s == null){
			return null;
		}
	    try{
	    	Date startDate = dateFormat.parse(s.toString());
	    	Calendar calendar = Calendar.getInstance();
	    	calendar.setTime(startDate);
	    	calendar.add(Calendar.DATE, days);
	    	return new Text(dateFormat.format(calendar.getTime()));
	    }catch(Exception e){
	    	e.printStackTrace();
	    	return s;
	    }
	}
	
}

从eclipse中打包成JAR包:HiveCustomFunction.jar,并上传到安装Hive的机器上。

第二步:加载Jar包并创建临时函数

hive> add jar /data0/soft/hive2.1.1/custom_lib/HiveCustomFunction.jar;
hive> create temporary function date_sub_format as 'com.paic.hive.function.UDFDateSubFormat';

第三步:使用自定义函数

hive> select date_sub_format('20170504',-30,'yyyyMMdd');
OK
20170404
Time taken: 0.156 seconds, Fetched: 1 row(s)
关键字:   udf     hive  
评论信息
暂无评论
发表评论
验证码: 
Powered by IMZHANGJIE.CN Copyright © 2015-2025 粤ICP备14056181号