Hive中的序列化和反序列化

3.1. SerDe是什么
SerDe是Serializer、Deserializer的简称,目的是用于序列化和反序列化。序列化是对象转化为字节码的过程;而反序列化是字节码转换为对象的过程。
Hive使用SerDe(和FileFormat)读取和写入行对象。

将文件数据映射到表上 --反序列化
#百度百科解释-->序列化 (Serialization)
#是将对象的状态信息转换为可以存储或传输的形式的过程。
#在序列化期间,对象将其当前状态写入到临时或持久性存储区。.
#以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。
将表上的数据写入文件 --序列化

需要注意的是,“key”部分在读取时会被忽略,而在写入时key始终是常数。基本上行对象存储在“value”中。
可以通过desc formatted tablename查看表的相关SerDe信息。默认如下:
在这里插入图片描述

3.2. Hive读写文件流程
Hive读取文件机制:首先调用InputFormat(默认TextInputFormat),返回一条一条kv键值对记录(默认是一行对应一条记录)。然后调用SerDe(默认LazySimpleSerDe)的Deserializer,将一条记录中的value根据分隔符切分为各个字段。
Hive写文件机制:将Row写入文件时,首先调用SerDe(默认LazySimpleSerDe)的Serializer将对象转换成字节序列,然后调用OutputFormat将数据写入HDFS文件中。

3.3. SerDe相关语法
在Hive的建表语句中,和SerDe相关的语法为:
在这里插入图片描述

其中ROW FORMAT是语法关键字,DELIMITED和SERDE二选其一。
如果使用delimited表示使用默认的LazySimpleSerDe类来处理数据。如果数据文件格式比较特殊可以使用ROW FORMAT SERDE serde_name指定其他的Serde类来处理数据,甚至支持用户自定义SerDe类。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当使用Hive的UDTF(User-Defined Table Function)时,序列错误可能会发生。这通常是由于UDTF返回的表无法正确序列导致的。在处理大量数据时,这种错误可能会发生。为了解决这个问题,有几个方法可以尝试: 1. 检查是否忽略错误选项被设置为false。根据引用,默认情况下,Hive会忽略错误并继续执行下一行。如果设置为true,则会在遇到错误时停止执行。 2. 检查Hive的Partitioner类是否正确设置。根据引用,默认的Partitioner类是'org.apache.hadoop.hive.ql.io.DefaultHivePartitioner'。确保这个类正确设置,以确保正确的分区和序列。 3. 检查Hive Map Join缓存的行数是否适当。根据引用,默认情况下,Hive Map Join会缓存25000行。如果处理的数据量超过了这个数量,可能会导致序列错误。可以尝试调整这个值以适应实际的数据量。 如果以上方法都没有解决问题,还可以尝试更新Hive版本或查找相关的错误日志和文档以获取更多的帮助。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [hive 各配置参数用法](https://blog.csdn.net/u012969412/article/details/78010093)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值