|NO.Z.00020|——————————|BigDataEnd|——|Hadoop&PB级数仓.V04|——|PB数仓.v04|会员活跃度分析|json数据处理&SerDe处理json数据|

网友投稿 268 2022-11-19

|NO.Z.00020|——————————|BigDataEnd|——|Hadoop&PB级数仓.V04|——|PB数仓.v04|会员活跃度分析|json数据处理&SerDe处理json数据|

一、使用SerDe处理

### --- 使用SerDe处理~~~ 序列化是对象转换为字节序列的过程;反序列化是字节序列恢复为对象的过程;~~~ # 对象的序列化主要有两种用途:~~~ 对象的持久化,即把对象转换成字节序列后保存到文件中~~~ 对象数据的网络传送

~~~ SerDe 是Serializer 和 Deserializer 的简写形式。~~~ Hive使用Serde进行行对象的序列与反序列化。~~~ 最后实现把文件内容映射到 hive 表中的字段数据类型。~~~ # SerDe包括Serialize/Deserilize 两个功能:~~~ Serialize把Hive使用的java object转换成能写入HDFS字节序列,或者其他系统能识别的流文件~~~ Deserilize把字符串或者二进制流转换成Hive能识别的java object对象~~~ Read : HDFS files => InputFileFormat => => Deserializer => Row object~~~ Write : Row object => Seriallizer => => OutputFileFormat => HDFS files

### --- 常见:--- Hive本身自带了几个内置的SerDe,还有其他一些第三方的SerDe可供选择。~~~ # 语法:~~~ 创建表create table t11(id string) stored as parquet;create table t12(id string)stored as ORC;

~~~ # 操作实例hive (test)> create table t11(id string) > stored as parquet;hive (test)> > create table t12(id string) > stored as ORC;

### --- 查看他们使用了什么样的反序列化方式~~~ # 语法desc formatted t11;desc formatted t12;~~~ LazySimpleSerDe(默认的SerDe)~~~ ParquetHiveSerDe~~~ OrcSerde

~~~ # 实例操作hive (test)> desc formatted t11;# Storage Information SerDe Library: org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe InputFormat: org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat OutputFormat: org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat hive (test)> desc formatted t12;# Storage Information SerDe Library: org.apache.hadoop.hive.ql.io.orc.OrcSerde InputFormat: org.apache.hadoop.hive.ql.io.orc.OrcInputFormat OutputFormat: org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat

三、纯json格式数据通过JsonSerDe处理

### --- 创建json文件:对于纯 json 格式的数据,可以使用 JsonSerDe 来处理。[root@hadoop02 ~]# vim /data/yanqidw/logs/data/json2.dat{"id": 1,"ids": [101,102,103],"total_number": 3}{"id": 2,"ids": [201,202,203,204],"total_number": 4}{"id": 3,"ids": [301,302,303,304,305],"total_number": 5}{"id": 4,"ids": [401,402,403,304],"total_number": 5}{"id": 5,"ids": [501,502,503],"total_number": 3}

### --- 建表并导入数据~~~ # 语法~~~ 建表语句create table jsont2(id int,ids array,total_number int)ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe';

~~~ 导入数据load data local inpath '/data/yanqidw/logs/data/json2.dat' into table jsont2;

~~~ # 操作实例hive (test)> create table jsont2( > id int, > ids array, > total_number int > ) > ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe';hive (test)> load data local inpath '/data/yanqidw/logs/data/json2.dat' into table jsont2;

~~~ # 查看创建的表hive (test)> desc jsont2;OKcol_name data_type commentid int from deserializer ids array from deserializer total_number int from deserializer

四、各种Json格式处理方法小结:

### --- 各种Json格式处理方法小结:~~~ 简单格式的json数据,使用get_json_object、json_tuple处理~~~ 对于嵌套数据类型,可以使用UDF~~~ 纯json串可使用JsonSerDe处理更简单

Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart

——W.S.Landor

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:AVR单片机的SD卡接口程序设计
下一篇:java实现IP地址转换
相关文章

 发表评论

暂时没有评论,来抢沙发吧~