Parquet的那些事(二)Spark中的Schema兼容问题

本文探讨了在Spark中处理Parquet文件时遇到的Schema兼容问题,包括文件加载和表加载两种方式。在文件加载时,Spark默认选择一个文件推导Schema,可通过参数`spark.sql.parquet.mergeSchema`合并所有文件Schema。表加载时,Spark从Hive Metastore获取Schema并合并。文章详细阐述了Schema合并的规则,并提供了避免性能损耗的建议。
摘要由CSDN通过智能技术生成

Parquet是一种存储格式,其本身与任何语言、平台都没有关系,也不需要与任何一种数据处理框架绑定。但是一个开源技术的发展,必然需要有合适的生态圈助力才行,Spark便是Parquet的核心助力之一。作为内存型并行计算引擎,Spark被广泛应用在流处理、离线处理等场景,其从1.0.0便开始支持Parquet,方便我们操作数据。

在Spark中操作Parquet文件有两种方式,一种是直接加载文件,另一种是透过Hive表来读取数据。我们姑且称之为文件加载、表加载。这两种方式在API层面都非常简洁,它隐藏了底层推导Schema、并行加载数据等细节。

# By File
df = spark.read.parquet("s3://mydata/type=security")

# By Table
df = spark.read.table("data_mine.security_log")

在实际使用中,我们经常会遇到Schema兼容的问题,其根源是Schema不一致,主要有以下两种情况:

  • 存放在HDFS/S3上面的Parquet文件具有不同的Schema
  • Hive Metastore Schema与Parquet文件自带的Schema不一致

不管是需求变化、产品迭代还是其他原因,总是会出现Schema变化的情况,导致不同Parquet文件的Schema不同。比如,新增了一

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值