hive 自定义UDF

先把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







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值