Spark存储Parquet数据到Hive时如何对map、array、struct字段类型进行处理


这篇文章给大家分享的是有关Spark存储Parquet数据到Hive时如何对map、array、struct字段类型进行处理的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。为了更好的说明导致问题的原因、现象以及解决方案,首先看下述示例:insert into table t1 values(1,map(),array(‘1,1,1’),named_struct(‘A’,’1′,’B’,’1′));insert into table t2 partition(dt=’20200101′)t1表正常执行,但对t2执行上述insert语句时,报如下异常:t1和t2从建表看唯一的区别就是t1不是分区表而t2是分区表,仅仅从报错信息是无法看出表分区产生这种问题的原因,看看源码是做了哪些不同的处理(这里为了方便,笔者这里直接给出分析这个问题的源码思路图):从抛出的异常信息empty fields are illegal,关键看empty fields在哪里抛出,做了哪些处理,这要看MessageColumnIO中startField和endField是做了哪些处理:针对map做处理的一些源码:
break; //下面是对double、boolean、float、byte、int等数据类型做的处理,这里不在贴出 ....这里只是以map为例,对于array、struct都有类似问题,看源码HiveFileFormat -> DataWritableWriter对这三者处理方式类似。类似的问题,在Hive的issue中https://issues.apache.org/jira/browse/HIVE-11625也有讨论。1. 如果无法改变建表schema,或者存储时底层用的就是HiveFileFormat-- 这种方式本质上还是用ParquetFileFormat,并且是内部表,生产中不建议直接使用这种方式CREATE TABLE ` 香港云主机test`(3. 存储时指定ParquetFileFormat感谢各位的阅读!关于“Spark存储Parquet数据到Hive时如何对map、array、struct字段类型进行处理”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

相关推荐: 怎么用HttpClientFactory来实现简单的熔断降级

本篇内容介绍了“怎么用HttpClientFactory来实现简单的熔断降级”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习 香港云主机一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!用个简单的控制台程序来演示…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 09/16 15:52
Next 09/16 15:53

相关推荐