小赖子的英国生活和资讯

Parquet 文件简介

阅读 桌面完整版

我在AWS亚麻迅云(S3存储)工作的时候第一次了解到Parquet文件,觉得很神奇。简单来说,就是CSV文件按列来存储。

什么是 Parquet 文件?

Parquet是一个为大数据处理框架(如Apache Hadoop、Apache Spark等)优化的列式存储文件格式。它是Twitter和Cloudera之间的合作产物。作为一种列式格式,与传统的基于行的格式(如CSV或JSON)相比,它具有一些明显的优势:

压缩

由于列式存储的特性,每一列的数据更为同质,这使得它比基于行的存储具有更好的压缩比。例如,存储年龄值的列将只有整数,从而实现有效的压缩

读取效率

对于只需要部分列的分析查询,Parquet只从磁盘读取必要的列。这比读取整行并丢弃不需要的数据更为高效

模式进化

Parquet支持复杂的嵌套数据结构,且其模式可以随时间发展。这意味着您可以在不需要重写整个数据集的情况下添加、删除或修改列。

性能

有效的压缩和通过只读必要列来减少I/O的组合可以极大地加快大型数据集上的分析查询性能。

兼容性

Parquet得到了广泛的数据处理工具的支持,包括但不限于Hadoop、Spark、Presto、Hive、Impala等。

类型支持

Parquet支持丰富的数据结构,包括标准原始数据(整数、浮点数、字符串)和更复杂的类型(列表、映射、结构体)。

压缩算法

Parquet支持多种压缩算法,允许用户选择压缩比和解压速度之间的最佳权衡。

谓词下推

许多处理引擎可以利用Parquet的列式特性来下推某些谓词(过滤器)并只读取必要的数据块,从而进一步优化查询性能

一个Parquet格式的最简单的例子

要更好地理解Parquet格式,与CSV这样的传统基于行的格式对比数据的存储方式是很有用的。

假设你有一个小型的数据集,记录了人们的名字和他们的年龄:

CSV格式:

Name, Age
John, 25
Jane, 30
Doe, 35

在CSV中,数据按行存储。所以当你读取文件时,你会一行一行地读取它。

而在Parquet中,数据会按列存储:

Name:  John, Jane, Doe
Age:   25,   30,   35

有点类似矩阵转置的意思。

这种列式存储意味着,如果你只对查询”Age”列感兴趣,你可以只读取那一列的数据,而不触及”Name”数据。这是一个简单且小的数据集,但你可以想象在处理数十亿行和多列的数据时的效率提升。

实际的Parquet文件是二进制文件,所以你无法像CSV那样在文本编辑器中打开并查看它。你会看到优化的列式存储的二进制数据,以及关于模式、压缩细节等的元数据。

英文:Introduction to Parquet Files

强烈推荐

微信公众号: 小赖子的英国生活和资讯 JustYYUK

阅读 桌面完整版
Exit mobile version