背景
本文基于Spark 3.3.0
列式存储Parquet文件越来越受到工业界的青睐,在delta以及Spark中应用广泛,具体的项目见:parquet-mr
分析
Parquet格式
关于parquet的格式存储以及读取,可以参考大数据列存标准格式 - Parquet,总结一下就是:
Parquet采用类似Protobuf的协议来描述数据的Schema,字段的描述有三种(逻辑上):
required 有且仅有一次
optional 0或1次
repeated 0次或多次
具体到物理存储,就得有Repetition Level(对应repeated),Definition Level(对应optional) ,required是不需要的,因为字段存在就有,不存在就没有。
其实这种很好理解,因为在Dremel/Parquet中,提出的是以树状形式来组织schema中的字段,举例子:
message AddressBook {
required string owner;
repeated string phoneNumber;
repeated group contacts {
required string name;
optional string phoneNumber;
}
}
对应到树形结构为:
AddressBook
/ | \
V V V
Spark3.3.0中的Parquet优化与列索引技术解析

本文介绍了Spark3.3.0中Parquet文件格式的存储原理,包括RepetitionLevel和DefinitionLevel的概念,以及在处理嵌套类型时的向量化读取方式。在性能提升方面,列索引的引入允许更高效的过滤操作,减少了不必要的IO。Spark3.2.0开始支持Parquet列索引读取,改进了谓词下推策略,实现了基于page级别的数据过滤,进一步优化了查询性能。
最低0.47元/天 解锁文章
620

被折叠的 条评论
为什么被折叠?



