Parquet文件格式
Parquet文件格式
Parquet文件格式包含一个header,多个blocks(row groups),一个footer。header仅仅包含4字节数字,表示这个文件是parquet格式。所有的文件元数据存储在footer中,文件元数据包含格式版本,schema,额外的key-value值,每个row group的元数据。footer还包含4字节文件元数据的编码长度,以及4字节的数字。
读取Parquet文件时,首先需要定位到文件底部(减去8字节)读取文件元数据编码长度,然后通过编码长度读取文件元数据。不像sequence和Avro文件,元数据存储在header中,需要sync markers来切割blocks。parquet文件不需要sync markers,因为block边界已经存储在footer的文件元数据中(因为数据先写,元数据后写。这样可以保留block边界位置)。因此Parquet文件是可切割的,因为当读取footer后,可以定位block,然后进行并行化处理(MapReduce)。
每个block是一个row group,每个row group包含多个column chunks,每个column chunk包含多个pages。
每个page包含同一个列的值,因为这些值非常相似,可以做很好的压缩。压缩首先是使用值怎样编码,最简单的编码方式文本编码(值完成填写,例如,int32数据类型用4字节的数据填写),但这并不提供任何压缩。
Parquet也支持更好压缩编码,包含delta编码(存储值之间的不同),run-length编码。