编写代码
hive的UDF函数只需要继承UDF这个类就可以,如果重写evaluate方向就可以了,里面的具体实现可以用java来实现这里面的逻辑
package function_duf;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;
public class UDFCOMP extends UDF {//继承这个UDF的类
public boolean evaluate(Text t1,Text t2){//重写evaluate方法
if(t1==null || t2==null){
return false;
}
double d1=Double.parseDouble(t1.toString());
double d2=Double.parseDouble(t2.toString());
if(d1>d2)
return false;
else
return true;
}
}
加载jar包
add jar /home/hadoop/vehicle.jar; 加入jar包
create temporary function udfcomp as ‘function_duf.UDFCOMP’; 创建临时函数
执行过程
hive> select udfcomp(sal,1500),sal from emp;
Total jobs = 1
Launching Job 1 out of 1
Number of reduce tasks is set to 0 since there's no reduce operator
Starting Job = job_1445256336608_0001, Tracking URL = http://master:8088/proxy/application_1445256336608_0001/
Kill Command = /home/hadoop/hadoop-2.6.0/bin/hadoop job -kill job_1445256336608_0001
Hadoop job information for Stage-1: number of mappers: 2; number of reducers: 0
2015-10-19 08:42:54,059 Stage-1 map = 0%, reduce = 0%
2015-10-19 08:43:12,081 Stage-1 map = 100%, reduce = 0%, Cumulative CPU 3.1 sec
MapReduce Total cumulative CPU time: 3 seconds 100 msec
Ended Job = job_1445256336608_0001
MapReduce Jobs Launched:
Job 0: Map: 2 Cumulative CPU: 3.1 sec HDFS Read: 1242 HDFS Write: 145 SUCCESS
Total MapReduce CPU Time Spent: 3 seconds 100 msec
OK
true 800
false 1600
true 1250
false 2975
true 1250
false 2850
false 2450
false 3000
false 5000
true 1500
true 1100
true 950
false 3000
true 1300
错误解答
hive> select udfcomp(sal,1500),sal from emp;
FAILED: SemanticException [Error 10014]: Line 1:7 Wrong arguments '1500': No matching method for class function_duf.UDFCOMP with (string, int). Possible choices:
检查 你是否重写了 evaluate 方法,方法是否是public 共有的