Hive自定义函数UDF的简单应用。

本实例简单的对json字符串使用自定义函数进行解析,方便hive的使用。

首先数据长这样:

很多几十万条:

{"movie":"2081","rate":"5","timeStamp":"977536266","uid":"106"}
{"movie":"1357","rate":"3","timeStamp":"977536364","uid":"106"}
{"movie":"902","rate":"3","timeStamp":"977536244","uid":"106"}
{"movie":"1296","rate":"4","timeStamp":"977536022","uid":"106"}
{"movie":"908","rate":"4","timeStamp":"977535797","uid":"106"}
{"movie":"838","rate":"4","timeStamp":"977536195","uid":"106"}
{"movie":"3044","rate":"4","timeStamp":"977536195","uid":"106"}
{"movie":"2243","rate":"4","timeStamp":"977536106","uid":"106"}
 

我们用hive分析这些数据时内置函数已经满足不了需求,需要自定义函数来实现。

需求:想要传递一个json串和index ,就能返回相应的字段,比如:

select myjson(json,1),myjson(json,2),myjson(json,3),myjson(json,4) from xx;

能够返回上面相应的:2081,5,977536266,106    hive中的json解析函数也可以,文末介绍。

需要写个java类,来进行实现。

hive自定义函数实现的步骤:

1、写 java程序实现想要的功能,传入json串和角标返回相应的值

2、打包成jar上传到hive机器

3、在hive命令中添加jar到classpath  # 在hive中操作:add jar /你的路径/xx.jar

4、创建一个myjson函数关联java类 #create temporary function myjson as 'cn.thy.json.myJsonParser'; 

创建java类,要继承org.apache.hadoop.hive.ql.exec.UDF,重载evaluate方法,传入json串和索引index返回想要的字符串

package cn.thy.json;

import org.apache.hadoop.hive.ql.exec.UDF;

public class myJsonParser extends UDF{
	//重载父类中的一个方法evaluate
	public String evaluate(String json,int index) {
		//{"movie":"1193","rate":"5","timeStamp":"978300760","uid":"1"}
		/**
		 * 1  3  1*4-1
		 * 2  7	 2*4-1
		 * 3  11
		 * 4  15
		 * 等差数列
		 */
		String[] fields = json.split("\"");
		return fields[4*index-1];
	}
}

将类打成jar包。

Hive自定义函数UDF的简单应用。_第1张图片

添加到hive的classpath

add jar /你的路径/xx.jar

Hive自定义函数UDF的简单应用。_第2张图片

创建hive函数关联这个java类

create temporary function myjson as 'cn.thy.json.myJsonParser';

将使用自定义函数的查询结果放入到表t_rate中

create table t_rate as
select myjson(json,1) as movie,myjson(json,2) as rate,myjson(json,3) as ts,myjson(json,4) as uid
from t_ratingjson;

查看t_rate :

Hive自定义函数UDF的简单应用。_第3张图片

 然后我们就可以做相应的统计分析了。

 

使用hive中的json解析函数进行生成表

select json_tuple(json,'movie','rate','timeStamp','uid') as(movie,rate,ts,uid) 
from t_ratingjson limit 10;

Hive自定义函数UDF的简单应用。_第4张图片

你可能感兴趣的:(Hive)