hive--json解析函数

内置函数

json_tuple(jsonStr, k1, k2, ...)

参数为一组键k1,k2……和JSON字符串,返回值的元组。该方法比 get_json_object 高效,因为可以在一次调用中输入多个键

hive中如何定义自己的函数:

 

  • 1、先写一个java类(extends UDF,重载方法public C evaluate(A a,B b)),实现你所想要的函数的功能(传入一个json字符串和一个脚标,返回一个值)
  • 2、将java程序打成jar包,上传到hive所在的机器
  • 3、在hive命令行中将jar包添加到classpath :     hive>add jar /root/hivetest/myjson.jar;
  • 4、在hive命令中用命令创建一个函数叫做myjson,关联你所写的这个java类
  •          hive> create temporary function myjson as 'cn.edu360.hive.udf.MyJsonParser';

写java类:

创建java project:例hive-json

右键,new folderhive--json解析函数_第1张图片

Windows中解压hive安装包hive--json解析函数_第2张图片

找到放置jar包的lib文件夹lhive--json解析函数_第3张图片

将所有jar放入所建项目的lib目录下。

选中项目中lib目录下的jar→右键→build path。

在项目中的src目录下创建java类hive--json解析函数_第4张图片JsonParser

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

public class JsonParser extends UDF {
    // 重载父类中的一个方法evaluate()
    private String evaluate(String json,int index) {
        //{"movie":"661","rate":"3","timeStamp":"978302109","uid":"1"}
        String[] fields = json.split("\"");    
        return fields[4*index-1];
    }
}
将该类打成jar包:右键项目exporthive--json解析函数_第5张图片

 

上传jar到hive所在的机器

sftp> put d:/路径/jsonparser.jar

添加jar包到classpath中

 hive>add jar /上传后jar包所在/jsonparser.jar(jar包名称);

命令创建函数关联java类

hive> create temporary------临时

hive>function myjson

hive>as 'cn.edu360.hive.udf.JsonParser'-----java类的全路径名(在eclipse中可以得到);

例如:

/*
有如下json数据:rating.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"}

*/

需要导入hive中进行数据分析

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

hive 自带解析函数:json_tuple

可用于简单json的解析

create table 新表名 as

select json_tuple(json字段的字段名,'json内容中的key值1','json内容中的key值2','json内容中的key值3',......)

[as('key值别名1','key值别名2','key值别名3')] 

from 表名;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(大数据,Linux,Java项目,hive)