Parquet写数据过程及源代码分析
本文主要从parquet写数据的角度进行分析,主要涉及parquet从拿到数据模型到最终将一条记录经过计算、编码、压缩等过程写入内存的过程(暂时没有包括写入文件的过程,后续补充)。主要从以下几个方面进行介绍:
- 写流程涉及的类
- 写数据的过程
先看看在这个过程中涉及的类及其作用
这里介绍的类都是一些基类,具体的实现类大家可以去看里面具体的实现类...
valueWriter:
这个类是一个父类,主要涉及相应的压缩操作,算是在写入文件之前最后调用的类。这个类不需要知道自己的输入具有什么含义,只需要按照相应的规则对输入的byte进行压缩即可,然后将输出结果保存在自己维护的一个ByteArrayOutputStream里面。
pageWriter:
从类名可以直接看出,这个类是将数据按照page进行组织的一个类。它本身不涉及任何编码与压缩操作,它的作用是与valueWriter相配合,当valueWriter中的数据量达到一定阈值的时候,系统会将其中的数据写入到pageWriter中,具体后面会给出解析。
ColumnWriter:
这个类是对一列进行写入操作的类,这个类包含一个pageWriter
和三个valueWriter
,三个valueWriter的作用分别是写入Value、Repeation level 、Definition l