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
博客:Parquet 文件简介
Steem 坐火箭🚀!
- 您可以通过 steem2usdt 交换 STEEM/SBD 到 Tether USDT (波场U, TRC-20)!
- 您可以通过 steem2trx 交换 STEEM/SBD 到 波场 TRX (TRON)!
- 您可以通过 steem2bts 交换 STEEM/SBD 到 比特股 BTS (BitShares)!
- 在 SteemYY 免费注册 STEEM 帐户!
!ask what is parquet files?
Parquet files are a columnar storage format used in the Hadoop ecosystem. They store data in columns, which stores less data and allows for faster read/write times. Parquet files are also optimized for compression, making them ideal for storing large amounts of data.
command: !ask is powered by witness @justyy and his contributions are: SteemYY.com
More Commands are coming!. !ask is currently based on ChatGPT-3.5
!test !thumbup
Hello @ericandryan! You are Delightful!
command: !thumbup is powered by witness @justyy and his contributions are: SteemYY.com
More Commands are coming!