Hive内置运算函数,自定义函数(UDF)和Transform
来源:互联网 发布:java上线项目实战视频 编辑:程序博客网 时间:2024/05/21 00:19
4.Hive函数
4.1 内置运算符
内容较多,见《Hive官方文档》
4.2 内置函数
内容较多,见《Hive官方文档》
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF
测试各种内置函数的快捷方法:
1、创建一个dual表
create table dual(id string);
2、load一个文件(一行,一个空格)到dual表
hive> load data local inpath'/home/tuzq/software/hivedata/dual.txt' into table dual;
其中dual.txt里面只是一个空格
3、select substr('angelababy',2,3) from dual;
4.3 Hive自定义函数和Transform
当Hive提供的内置函数无法满足你的业务处理需要时,此时就可以考虑使用用户自定义函数(UDF:user-defined function)。
4.3.1 自定义函数类别
UDF 作用于单个数据行,产生一个数据行作为输出。(数学函数,字符串函数)
UDAF(用户定义聚集函数):接收多个输入数据行,并产生一个输出数据行。(count,max)
4.3.2 UDF开发实例
l 简单UDF示例
前期准备,要把hive的lib包导入到工程中,其中UDF依赖的是hive-exec-1.2.1.jar。也就是说要把apache-hive-1.2.1-bin\lib中内容都引入到工程中。若用到hadoop中的一些api,请把hadoop的api也引入进去。
1、先开发一个java类,继承UDF,并重载evaluate方法
package hiveudf;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;
public class ToLowerCase extends UDF {
public Text evaluate(final Text s) {
if(s == null) {returnnull;}
returnnew Text(s.toString().toLowerCase());
}
}
2、打成jar包上传到服务器
3、将jar包添加到hive的classpath
4、hive> add jar /home/tuzq/software/hivedata/udf.jar;
Added [/home/tuzq/software/hivedata/udf.jar] to class path
Added resources: [/home/tuzq/software/hivedata/udf.jar]
5、hive>创建临时函数与开发好的java class关联
hive> create temporary function toLowercase as 'hiveudf.ToLowerCase';
OK
Time taken: 0.039 seconds
hive>
5、即可在hql中使用自定义的函数tolowercase ip
hive> select toLowercase("TUZUOQUAN") from dual;
OK
tuzuoquan
Time taken: 0.122 seconds, Fetched: 1 row(s)
hive>
l Json数据解析UDF开发
作业:
有原始json数据如下:
{"movie":"1193","rate":"5","timeStamp":"978300760","uid":"1"}
{"movie":"661","rate":"3","timeStamp":"978302109","uid":"1"}
{"movie":"914","rate":"3","timeStamp":"978301968","uid":"1"}
{"movie":"3408","rate":"4","timeStamp":"978300275","uid":"1"}
{"movie":"2355","rate":"5","timeStamp":"978824291","uid":"1"}
{"movie":"1197","rate":"3","timeStamp":"978302268","uid":"1"}
{"movie":"1287","rate":"5","timeStamp":"978302039","uid":"1"}
需要将数据导入到hive数据仓库中
我不管你中间用几个表,最终我要得到一个结果表:
movie
rate
timestamp
uid
1197
3
978302268
1
注:全在hive中完成,可以用自定义函数
4.3.3 Transform实现
Hive的 TRANSFORM 关键字提供了在SQL中调用自写脚本的功能
适合实现Hive中没有的功能又不想写UDF的情况
使用示例1:下面这句sql就是借用了weekday_mapper.py对数据进行了处理.
CREATE TABLE u_data_new (
movieid INT,
rating INT,
weekday INT,
userid INT)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t';
add FILE weekday_mapper.py;
INSERT OVERWRITE TABLE u_data_new
SELECT
TRANSFORM (movieid , rate, timestring,uid)
USING 'python weekday_mapper.py'
AS (movieid, rating, weekday,userid)
FROM t_rating;
其中weekday_mapper.py内容如下
#!/bin/python
import sys
import datetime
for line in sys.stdin:
line = line.strip()
movieid, rating, unixtime,userid = line.split('\t')
weekday = datetime.datetime.fromtimestamp(float(unixtime)).isoweekday()
print '\t'.join([movieid, rating, str(weekday),userid])
- Hive内置运算函数,自定义函数(UDF)和Transform
- HIVE 自定义函数 UDF
- Hive自定义函数-UDF
- hive自定义函数UDF
- Hive自定义函数UDF
- Hive自定义UDF函数
- 自定义HIVE-UDF函数
- hive自定义函数UDF
- Hive自定义UDF和聚合函数UDAF
- hive自定义函数(UDF和UDAF)
- Hive自定义UDF和聚合函数UDAF
- Hive内部自定义函数UDF
- hive 自定义函数UDF,UDAF
- Hive自定义函数UDF开发
- Hive自定义函数(UDF、UDAF)
- Hive添加自定义UDF函数
- Hive 中自定义UDF函数
- Hive自定义函数(UDF、UDAF)
- Java中HashMap,LinkedHashMap,TreeMap的区别
- DefaultKeyedVector和KeyedVector用法
- PAT甲级 1001
- MVVM 与RAC 网络请求
- js/JavaScript正则表达式总结 --- 常用的JavaScript正则表达式需求总结
- Hive内置运算函数,自定义函数(UDF)和Transform
- Storm基础篇
- OpenCV实现基于Zernike矩的亚像素边缘检测
- syntax error, unexpected end of file
- python的列表求并集、
- MySQL判断一个字符串是否是另一个字符串的子字符串
- aa小游戏,旋转的小球
- Nginx通过ip和user_gent限制访问
- 关于Unity中单例调用和委托的使用方式