HIVE 自定义函数
来源:互联网 发布:数据库双机备份 编辑:程序博客网 时间:2024/05/19 13:10
转自:http://blog.csdn.net/zythy/article/details/18818559
当Hive提供的内置函数无法满足你的业务处理需要时,此时就可以考虑使用用户自定义函数(UDF:user-definedfunction)。
Hive目前只支持用java语言书写自定义函数。如果需要采用其他语言,比如Python,可以考虑上一节提到的transform语法来实现。
Hive支持三种自定义函数,我们逐个讲解。
UDF
这是普通的用户自定义函数。接受单行输入,并产生单行输出。
编写java代码如下:
package
import
import
public
}
然后,打包成.jar文件,比如hiveudf.jar。
执行以下语句:
add jar/home/user/hadoop_jar/hiveudf.jar;
create temporary functionpass_scorecom.oserp.hiveudf.PassExam;
selectstuNo,pass_score(score) from student;
输出结果为:
N0101
N0102
N0201
N0103
N0302
N0202
N0203
N0301
N0306
第一个语句注册jar文件;第二个语句为自定义函数取别名;第三个语句调用自定义函数。
Java代码中,自定义函数的类继承自UDF类,且提供了一个evaluate方法。这个方法接受一个整数值作为参数,并返回字符串。结构十分明了。其中的evaluate方法并没有作为interface提供,因为实际使用时,函数的参数个数及类型是多变的。
以上UDF名称是不区分大小写的,比如调用时写成PASS_SCORE也是可以的(因为它是hive中的别名,不是java类名)。
使用完成后,可调用以下语句删除函数别名:
Drop temporary functionpass_score;
UDAF
用户定义聚集函数(User-defined aggregatefunction)。接受多行输入,并产生单行输出。比如MAX,COUNT函数。
编写以下Java代码:
packagecom.oserp.hiveudf;
importorg.apache.hadoop.hive.ql.exec.UDAF;
importorg.apache.hadoop.hive.ql.exec.UDAFEvaluator;
importorg.apache.hadoop.hive.serde2.io.DoubleWritable;
importorg.apache.hadoop.io.IntWritable;
publicclass
}
然后打包成jar文件,比如hiveudf.jar。
执行以下语句:
addjar/home/user/hadoop_jar/hiveudf.jar;
create temporary functionavg_udf as'com.oserp.hiveudf.HiveAvg';
select classNo,avg_udf(score) from studentgroup by classNo;
输出结果如下:
C0168.66666666666667
C0280.66666666666667
C0373.33333333333333
参照以上图示(来自Hadoop权威教程)我们来看看各个函数:
l
注意上图中红色框中的init函数。在实际运行中,无论hive将记录集划分了多少个部分去做(比如上图中的file1和file2两个部分),init函数仅被调用一次。所以上图中的示例是有歧义的。这也是为什么上面的代码中加了特别的注释来说明。或者换一句话说,init函数中不应该用于初始化部分聚集值相关的逻辑,而应该处理全局的一些数据逻辑。
l
l
l
l
我们可以看出merge的输入参数类型和terminatePartial函数的返回值类型必须是一致的。
UDTF
用户定义表生成函数(User-defined table-generatingfunction)。接受单行输入,并产生多行输出(即一个表)。不是特别常用,此处不详述。
- HIVE 自定义函数
- 自定义-Hive自定义函数
- Hive 自定义函数函数
- Hive 自定义函数函数
- HIVE中的自定义函数
- hive用户自定义函数
- HIVE中的自定义函数 .
- HIVE中的自定义函数
- HIVE 自定义函数 UDF
- HIVE中的自定义函数
- hive中的自定义函数
- Hive自定义函数
- Hive自定义函数
- Hive自定义函数
- hive 自定义函数扩展
- Hive--自定义函数
- HIVE自定义函数类型
- Hive中自定义函数
- [转载]hive的查询注意事项以及优…
- 获取输入字符串的下一个字典序排列
- R中设置图形参数--函数par()…
- HIVE 加jar包
- Hive MapReduce脚本
- HIVE 自定义函数
- HIVE 中 multi_distinct的注意事项
- 我学习的R函数
- hive常用函数 两层json格式解析
- ive lateral view…
- svd++
- Deep learning和Reinforcement lea…
- MyBatis Generator Tool工具生成代码
- iOS GitLab版本管理需要忽略的文件