目 录CONTENT

文章目录

CSV 与 Parquet vs. Arrow:存储格式解析

Administrator
2026-01-14 / 0 评论 / 0 点赞 / 0 阅读 / 0 字

📢 转载信息

原文链接:https://www.kdnuggets.com/csv-vs-parquet-vs-arrow-storage-formats-explained

原文作者:Kanwal Mehreen


CSV vs. Parquet vs. Arrow: Storage Formats Explained
Image by Author

 

#  引言

 
Hugging Face Datasets 提供了一种极其简单的方法,只需一行代码即可加载数据集。这些数据集通常以 CSV、Parquet 和 Arrow 等格式提供。虽然这三种格式都旨在存储表格数据,但它们在后端的操作方式却截然不同。每种格式的选择都决定了数据如何存储、加载速度、所需的存储空间以及数据类型的保留效率。 随着数据集越来越大、模型越来越复杂,这些差异变得愈发显著。在本文中,我们将探讨 Hugging Face Datasets 如何处理 CSV、Parquet 和 Arrow,它们在磁盘和内存中究竟有何不同,以及何时应该使用每种格式。那么,让我们开始吧。


#  1. CSV

 
CSV 代表逗号分隔值(Comma-Separated Values)。它本质上就是文本,每行代表一个记录,列之间用逗号(或制表符)分隔。几乎所有工具都可以打开它,例如 Excel、Google Sheets、pandas、数据库等。它非常简单且具有良好的互操作性。

示例:name,age,city
Kanwal,30,New York
Qasim,25,Edmonton

 

Hugging Face 将其视为一种基于行的格式,意味着它逐行读取数据。虽然对于小型数据集来说可以接受,但随着规模的扩大,性能会急剧下降。此外,它还有一些其他限制,例如:

  • 无显式模式(No explicit schema): 由于所有数据都以文本格式存储,因此每次加载文件时都需要推断数据类型。如果数据不一致,这可能会导致错误。
  • 文件体积大且 I/O 缓慢: 文本存储会增加文件大小,而从文本解析数字又非常消耗 CPU 资源。

#  2. Parquet

 
Parquet 是一种二进制列式存储格式。与 CSV 一行接一行写入的方式不同,Parquet 按列对值进行分组。这使得仅需要查询少数几列时,读取和查询速度大大加快,同时压缩特性还能降低文件大小和 I/O 负载。Parquet 还会存储数据的模式(schema),从而保证数据类型的准确性。它最适用于批处理大规模分析,但不适合对同一文件进行频繁的小规模更新(它更适合批量写入而非持续编辑)。如果我们以上面的 CSV 示例为例,Parquet 会将所有名字存储在一起,所有年龄存储在一起,所有城市存储在一起。这就是列式布局,示例存储方式如下:

名字: Kanwal, Qasim
年龄: 30, 25
城市: New York, Edmonton

 

它还会为每列添加元数据:数据类型、最小值/最大值、空值计数和压缩信息。这带来了更快的读取速度、更高效的存储和准确的类型处理。Snappy 或 Gzip 等压缩算法进一步减小了磁盘空间。它的优势如下:

  • 压缩性(Compression): 相似的列值可以很好地压缩。文件更小,存储成本更低。
  • 按列读取(Column-wise reading): 只需加载需要的列,从而加快查询速度。
  • 丰富的数据类型(Rich typing): 存储了模式,因此加载时无需猜测数据类型。
  • 可扩展性(Scale): 非常适合数百万甚至数十亿行的场景。

#  3. Arrow

 
Arrow 与 CSV 或 Parquet 不同。它是一种内存中的列式格式,旨在实现快速操作。在 Hugging Face 中,无论您是从 CSV、Parquet 还是 Arrow 文件开始,每个数据集的底层都由一个 Arrow 表支持。以相同的示例表为例,Arrow 也按列存储数据,但是在内存中:

名字: 连续的内存块,存储 Kanwal, Qasim
年龄: 连续的内存块,存储 30, 25
城市: 连续的内存块,存储 New York, Edmonton

 

由于数据存储在连续的内存块中,对某一列进行操作(如过滤、映射或求和)会变得极其快速。Arrow 还支持内存映射(memory mapping),允许数据集在不完全加载到 RAM 的情况下从磁盘访问。该格式的一些关键优势包括:

  • 零拷贝读取(Zero-copy reads): 无需将所有内容加载到 RAM 即可内存映射文件。
  • 快速的列访问(Fast column access): 列式布局支持向量化操作。
  • 丰富的数据类型(Rich types): 支持嵌套数据、列表和张量。
  • 互操作性(Interoperable): 与 pandas、PyArrow、Spark、Polars 等协同工作。

#  总结

 
Hugging Face Datasets 使格式切换变得例行化。使用 CSV 进行快速实验,使用 Parquet 存储大型表格,使用 Arrow 进行快速的内存内训练。了解何时使用每种格式,可以保持您的数据管道快速且简单,从而让您有更多时间专注于模型本身。
 
 

Kanwal Mehreen 是一位机器学习工程师和技术作家,对数据科学以及人工智能与医学的交叉领域怀有深厚的激情。她是电子书《Maximizing Productivity with ChatGPT》的合著者。作为 2022 年亚太区谷歌一代学者(Google Generation Scholar),她倡导多元化和学术卓越。她还被认定为 Teradata 多元化技术学者、Mitacs Globalink 研究学者以及哈佛 WeCode 学者。Kanwal 是一位积极的变革倡导者,她创立了 FEMCodes,旨在赋能 STEM 领域的女性。




🚀 想要体验更好更全面的AI调用?

欢迎使用青云聚合API,约为官网价格的十分之一,支持300+全球最新模型,以及全球各种生图生视频模型,无需翻墙高速稳定,文档丰富,小白也可以简单操作。

0

评论区