hive--json解析函数

29 篇文章 0 订阅
15 篇文章 0 订阅

内置函数

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 folder

Windows中解压hive安装包

找到放置jar包的lib文件夹l

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

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

在项目中的src目录下创建java类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包:右键项目export

 

上传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 表名;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值