【Hive】hive加载json数据和解析json(一)

事先说明,本人菜鸡一只,如果有说错的地方,还请大家指出批评,多多包涵~

 

本文有后续哦!

本文主要还是介绍hive中函数的解析json的函数get_json_object()和json_tuple()的使用,如果想通过serde直接加载hive数据,请看第二篇!

【Hive】hive加载json数据和解析json(二):https://blog.csdn.net/lsr40/article/details/103020021

 

一、

今天记录一下使用hive怎么加载json格式的数据,对于json格式,就不多做更多说明了,测试的数据是spark的example里面的people.json,数据很少,但是说明情况足矣。

先给出官网地址:https://cwiki.apache.org/confluence/display/Hive/LanguageManual%20DDL#LanguageManualDDL-JSON

数据是这样的:

 

{"name":"Michael"}

{"name":"Andy", "age":30}

{"name":"Justin", "age":19}

一个大括号是一个对象(一行数据),然后Michael这位小朋友age字段是缺失的。

1、接着开启hive,创建表(建表语句如下):

 create table spark_people_json( 

`name` string,

`age`   int)

ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'

STORED AS TEXTFILE;

2、但是这样直接使用JsonSerDe类,是会报错的,因为这个类并没有在初始化的时候加载到环境中

报错如下:

FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Cannot validate serde: org.apache.hive.hcatalog.data.JsonSerDe

3、因此先执行

ADD JAR ${HIVE_HOME}/hcatalog/share/hcatalog/hive-hcatalog-core-0.13.1-cdh5.3.6.jar

注:${HIVE_HOME}是hive的根目录,自己对应替换,还有本文测试的hive是hive-0.13.1-cdh5.3.6这个版本的,不同版本这个jar可能会有点路径上的区别,但是理论上是能找得到的!实在不行可以在中央仓库找找:http://mvnrepository.com/

4、在环境中添加了jar之后,接着创建表,就可以成功创建了(hive加载不同的数据使用的分隔符可能是不同的类,可以研究下这些类是怎么写的,就可以写出符合自己需求的分割类,然后打成jar包上传服务器,add就可以了,不过大多数通用的数据类型都是有对应的别人写好的类的,例如csv/tsv的就叫org.apache.hadoop.hive.serde2.OpenCSVSerde

5、创建好表之后,就load数据

load  data local inpath '/datas/people.json' into table spark_people_json;

6、最后进行select得到结果

7、字段缺失的值为NULL

 

二、

第二个是记录下如果只是某个字段为json,想要获取里面的某个值怎么操作?

有这么两个函数:get_json_object()和json_tuple()

1、get_json_object()

get_json_object函数第一个参数填写json对象变量,第二个参数使用$表示json变量标识,然后用 . 或 [] 读取对象或数组;

什么意思?

1、就是这样:

select get_json_object('{"shop":{"book":[{"price":43.3,"type":"art"},{"price":30,"type":"technology"}],"clothes":{"price":19.951,"type":"shirt"}},"name":"jane","age":"23"}', '$.shop.book[0].type')  

结果:

2、如果json简单,可以直接这样使用:

select get_json_object('{"name":"jack","server":"www.qq.com"}','$.server')

结果:

3、但是问题来了每次只能查一个字段

不信你可以试试:select get_json_object('{"name":"jack","server":"www.qq.com"}','$.server','$.name')

结果:

大概来说,意思是这个方法,只能接受两个参数,多的不行,那么就导致我们对同一个json数据想要查看多个值,只能多写几个get_json_object,比较麻烦,所以另一个方法就派上了用场。

4、json_tuple

使用方法:

select json_tuple('{"name":"jack","server":"www.qq.com"}','server','name')

结果:

5、但是缺点就是对于复杂的嵌套的json,就操作不了了(就是说使用不了".",“[]”这种符号来操作json对象),所以看情况选择这两个方法去使用。

OK,想记录的东西记录完了,祝大家春节快乐~

最后,本人菜鸡一个,如果有说的不对的地方,还望各位大神指点迷津!!

 

  • 27
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 使用Excel可以打开JSON文件,但是需要手动进行数据清洗和转换,不适合处理大量的JSON数据。 Python可以使用json库来读取和处理JSON数据,可以进行数据清洗、转换、筛选等操作。同时,Python还可以使用pandas库来进行数据分析和可视化。 Hive可以使用JSON SerDe来读取和处理JSON数据,可以进行数据清洗、转换、筛选等操作。同时,Hive还可以使用HQL语言进行数据分析和查询。 Spark可以使用Spark SQL来读取和处理JSON数据,可以进行数据清洗、转换、筛选等操作。同时,Spark还可以使用Spark MLlib来进行数据分析和机器学习。 ### 回答2: 在现如今大数据时代,我们面临着大量的数据存储和处理问题。而其中处理JSON数据就是我们最常见的需求之一。为此,我们现在可以使用几种不同的工具进行JSON数据的处理。其中,最流行的四种工具包括Excel、Python、Hive和Spark。 首先,“Excel”是一种非常经典的电子表格软件,对于JSON数据的处理也可以相当的有用。用户可以选择将JSON数据转换成CSV格式或者Excel的标准格式,然后使用Excel进行数据处理。这种方式的优点在于易于上手,而且操作简单。但是,对于大规模数据的处理,Excel的速度会变慢。 其次,“Python”是一种高级编程语言,经常用于大数据的处理和分析。Python实现JSON数据处理可以使用多种库如json库、pandas库和numpy库等。这样可以将JSON数据转换为Python可操控的数据结构,然后进行后续的数据处理和分析。Python对于JSON数据处理的效率很高,可以应对大规模数据的处理。 然后,“Hive”是一个基于Hadoop的数据仓库工具。它是一种开源的分布式数据存储和处理解决方案,可以用来管理大规模数据Hive的强项是可伸缩性和性能。它可以在大规模数据中进行JSON文件的逐行处理,实现数据挖掘和分析。 最后,“Spark”是一个Apache基金会的大数据计算框架。它基于内存运行,强调处理大规模数据的速度和效率。Spark的优点在于它可以通过多种语言如Python、Java和Scala进行数据处理,同时它也提供了丰富的API和工具库。使用Spark可以将JSON数据进行处理,支持复杂的分析和计算。 总之,以上四种工具都可以用来处理JSON数据,并且都有各自的优缺点。用户可以根据需求和要求选择合适的工具。对于大规模数据的处理,需要使用高效的工具如Python、Hive和Spark等。如果数据量不大,Excel亦可胜任。 ### 回答3: 在现今的大数据时代,处理Json数据是非常常见的任务,而Excel、Python、Hive以及Spark都是处理Json数据的常见工具。 Excel是众所周知的数据分析软件,它可以读取Json格式的数据并进行分析。可以通过Excel中的“数据”选项卡,在“来自文本/ CSV”、“来自网页”、“来自其他来源”三个选项中选择“来自文本/ CSV”,导入Json文件,然后对数据进行排序、筛选、图表制作等操作。 Python是专业的编程语言,在对Json数据的处理方面拥有非常强大的能力。Python可以使用Json模块进行读取、解析、转换和序列化Json数据,还可以使用第三方库如pandas、numpy、matplotlib等进一步进行数据处理和可视化。 Hive是一个数据仓库工具,可以对半结构化和非结构化数据进行复杂的ETL操作。Hive支持处理Json格式的数据,可以使用通用的语句如SELECT、INSERT等进行查询和操作。对于较大的Json文件,可以使用Hive的分区技术进行数据分区,从而提高查询效率。 Spark是目前最火的大数据处理框架,支持快速、高效的处理Json数据。Spark提供了Json格式文件的读写API,同时还提供了专门用于处理Json数据的函数库。Spark的强大并行处理能力可以让用户处理海量的Json数据,并在分布式环境下快速进行计算和分析。 总之,Excel、Python、Hive和Spark都是常见的处理Json数据的工具,各有其优势。用户可以根据不同的需求和数据规模,选择不同的工具进行处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值