环境
JDK版本:jdk1.7.0_67
IED: eclipse包
hadoop-core-1.2.1.jar
hive-exec-2.1.1.jar
hive-cli-2.1.1.jar
hive-jdbc-2.1.1.jarUDF develop coding
在引入相关包后,需要继承UDF类。
最后返回的结果是一个 Text类型。
//求两个时间之前的时间差,返回值以小时为单位
package com.udf;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;
public class Operation extends UDF {
public Text hourdiff (String date1, String date2) throws Exception{
date1 = date1.substring(0,date1.indexOf("."));
date2 = date2.substring(0,date2.indexOf("."));
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
Date d1 = sdf.parse(date1);
Date d2 = sdf.parse(date2);
Long diff = d2.getTime() - d1.getTime();
float hour = (float)diff / 3600000;
hour = Float.parseFloat(new DecimalFormat("###.0").format(hour));
return new Text(hour+ "" );
}
}
4.打成 jar 包
5.上传至hadoop, 在Hive中调用其方法。