先把hive-exec jar包导入到项目中
右击项目名称选择“Properties”选项
新建Max类:
package com.hive.test;
import org.apache.hadoop.hive.ql.exec.UDF;
/**
* 自定义UDF统计最大值
*
*/
public class Max extends UDF {
public Double evaluate(Double a, Double b) {
if(a==null)
a= Double.valueOf(0.0);
if(b==null)
b=Double.valueOf(0.0);
if(a.doubleValue() >=b.doubleValue()){
return a;
}else{
return b;
}
}
}
新建Min类:
package com.hive.test;
import org.apache.hadoop.hive.ql.exec.UDF;
/**
* 自定义UDF统计最小值
*
*/
public class Min extends UDF {
public Double evaluate(Double a, Double b) {
if(a==null)
a= Double.valueOf(0.0);
if(b==null)
b=Double.valueOf(0.0);
if(a.doubleValue() >=b.doubleValue()){
return b;
}else{
return a;
}
}
}
将自定义的Max和Min分别打包成maxUDF.jar和minUDF.jar, 然后上传至/home/hadoop/hive目录下,添加Hive自定义的UDF函数
add jar /home/hadoop/hive/maxUDF.jar;
add jar /home/hadoop/hive/minUDF.jar;
hive> add jar /home/hadoop/hive/maxUDF.jar;
Added [/home/hadoop/hive/maxUDF.jar] to class path
Added resources: [/home/hadoop/hive/maxUDF.jar]
hive> add jar /home/hadoop/hive/minUDF.jar;
Added [/home/hadoop/hive/minUDF.jar] to class path
Added resources: [/home/hadoop/hive/minUDF.jar]
创建Hive自定义的临时方法maxprice和minprice。
hive> create temporary function maxprice as 'com.dajiangtai.hadoop.hive.Max';
OK
Time taken: 0.094 seconds
hive> create temporary function minprice as 'com.dajiangtai.hadoop.hive.Min';
OK
Time taken: 0.012 seconds
统计204001股票,每日的最高价格和最低价格。
select stockid,tradedate, max(maxprice(buyprice,sellprice)),min(minprice(buyprice,sellprice)) from stock_partition where stockid='204001' group by tradedate;
ive> select stockid,tradedate, max(maxprice(buyprice,sellprice)),min(minprice(buyprice,sellprice)) from stock_partition where stockid='204001' group by tradedate;
204001 20130722 4.05 0.0
204001 20130723 4.48 2.2
204001 20130724 4.65 2.205
204001 20130725 11.9 8.7
204001 20130726 12.3 5.2