Hive开发UDF
从无到有开发hive的udf,本篇不针对简单的,针对复杂参数
移除点击此处添加图片说明文字
目录:
add jar /opt/workspace/udf/GetAppUDF.jar;

小坑,路径一定要写对,之前出现文件找不到,我以为要放到hdfs上面呢。
[hive@dw-gateway03 root]$ hadoop fs -mkdir /user/hive/warehouse/udf
[hive@dw-gateway03 root]$ hadoop fs -put /opt/workspace/udf/GetAppUDF-1.0.jar /user/hive/warehouse/udf/GetAppUDF.jar
后来及时悬崖勒马。
创建临时函数:
create temporary function GetAppUDF as 'com.test.Hive.udf.GetAppUDF';

哦,原来是jdk版本有问题啊。

本机是最新版,看下服务器的,

嗯,1.7.0_55的,咱们要去安装一下了。

安装

等一下进度



然后咱们remove换一下jdk
搞定之后,重新打包吧。
然后发布,还是这个玩意:

好难受呀。
然后咱们换第三个,1.7.0.88次修改,第三次装jdk好了,报另一个错了。
解决了这个问题了,还是蛮开心的。

咱们再:
create temporary function GetAppUDF as 'com.test.Hive.udf.GetAppUDF';
create temporary function GetAppUDF as ' com.test.Hive.udf.GetAppUDF ';
总是报错:FAILED: Class com.test.Hive.udf.GetAppUDF not found
后来我发现了,乱倒腾发现的。

那我们把他重新打印一遍:
add jar /opt/workspace/udf/GetAppUDF.jar;
create temporary function GetAppUDF as 'com.test.Hive.udf.GetAppUDF';
然后我们运行

我靠,然后我desc safedata.apk_use
发现

array<struct<apk:string,n:string,v:string,v_n:string,c:int,t:int>>
这种格式的字段,我第一次见到。
然后咱们查资料发现这么个东西:

暂且理解为全部强制性读进来。
但是这回报错:

这个到底是怎么回事呢?
原来是因为我们复制了很多>

那好,我们把>删掉,重来。
select uuid,GetAppUDF(apk_use),pt from safedata.apk_use limit 100;
结果:
FAILED: SemanticException [Error 10014]: Line 3:1 Wrong arguments 'apk_use': No matching method for class com.test.Hive.udf.GetAppUDF with (array<struct<apk:string,n:string,v:string,v_n:string,c:int,t:int>>). Possible choices: _FUNC_(string)
原因就是这个格式,很恶心, array<struct<apk:string,n:string,v:string,v_n:string,c:int,t:int>>
卡了很久,怎么办呢。
卡住了很久,我感觉要来个狠得。请看

结果气得想吐学:

java也这么蠢啊,好难受,妈的。
去网上找大神操作吧。

还是老样子,卡在这里快一到两个小时了,问了一下老大,他也不知道,让我研究。那好吧,继续研究吧。
我们看一篇文章:
Hive中,除了提供丰富的内置函数(见[一起学Hive]之二–Hive函数大全-完整版)之外