SPARK Parquet嵌套类型的向量化支持以及列索引(column index)

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

背景

本文基于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
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值