本文主要参考文献:Tom White. Hadoop权威指南. 第4版. 清华大学出版社, 2017.pages 363.
Aapche Parquet是一种能有效存储嵌套数据的列式存储格式,在Spark中应用较多。
列式存储格式在文件大小和查询性能上表现优秀,在列式存储格式下,同一列的数据连续保存。一般来说,这种做法可以允许更高效的编码方式,从而使列式存储格式的文件常常比行式存储格式的同等文件占用更少的空间。
例如:对于存储时间戳的列,采用的编码方式可以是存储第一个时间戳的值,尔后的值则只需要存储与前一个值之间的差,根据时间局部性原理(即同一时间前后的记录彼此相邻),这种编码方式更倾向于占用较小的空间。
查询引擎在执行时能够跳过对本次查询无用的行,提高查询性能。在Hadoop生态中还有其他的列式存储,如Hive项目中著名的ORCFile(Optimized Record Columnar File)。
Parquet的突出贡献在于能够以真正的列式存储格式来保存具有深度嵌套结构的数据。在显示世界中,具有多级嵌套模式的系统比较普通,所以这种能力非常重要。Parquet脱胎于Google发表的一篇关于Dremel的论文,它通过一种新颖的技术,以扁平的列式存储格式和很小的额外开销来存储嵌套的结构。有了这种技术,即使是嵌套的字段在读取时也不需求牵扯到其他字段,从而带来了性能上的极大提升。
Parquet的另一个特点是有很多工具都可以支持这种格式。作为Parquet的缔造者,Twitter和Cloudera的工程师们希望在尝试使用新工具来处理现有的数据时能够更加简化。为了达成这一目标,他们将该项目划分为两个部分,其一是以语言无关的方式来定义文件格式的Parquet规范(即Parquet-format),另一部分是不同语言(Java和C++)的规范实现,以便人们能够使用多种工具读/写Parquet文件。
事实上,大部分大数据处理组件都支持Parquet格式(包括MapReduce、Hive、Spark等)。这种灵活性同样也延伸至内存中的表示法:Java的实现并没有绑定某一种表示法,因而可以使用Avro、Thrift等多种内存数据表示法来讲数据写入Parquet文件或者从Parquet文件中读取数据。
数据模型
Parquet 的原子类型
Parquet定义了少数几个原子数据类型:
| 类型 | 描述 |
|---|---|
| boolean | 二进制值 |
| int32 | 32位有符号整数 |

最低0.47元/天 解锁文章

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



