格式分类
存储格式 vs 运行时内存格式 vs 消息传递格式 1.存储格式2. 一旦从存储格式中读取数据,你需要将数据转换为另一种表示形式,以便对其进行操作和计算。这种表示形式称为内存中的运行时表示或格式 字节对齐和随机读取与顺序读取的差异像 Arrow 和 FlatBuffers 这样的格式,其进程间表示与内存表示是相同的3. 消息传递格式,比如 Protobuf、FlatBuffers 和 JSON Protobuf 的官方文档指出其最适合的消息大小是小于 1 MB 关注点: 数据大小-序列化/反序列化速度-易用性(可读性和兼容性)存储成本/ 输入/输出(I/O)成本和数据检索的带宽成本以及网络延迟
数据的使用方式不同,在优化读取与优化写入之间通常会存在取舍Parquet 和 ORC 采用列式存储形式,通常比 CSV 和 Avro 更具压缩性
Parquet文件和Arrow格式
Hugging Face数据集的角度出发:Parquet格式能够高效地存储结构化和半结构化数据,特别适合大规模数据集的存储和查询Arrow 是一个跨语言的数据交换格式,主要用于内存中的数据存储和数据传输Parquet格式 是一种用于数据持久化存储的格式,而 Arrow格式 是一种高效的内存存储和传输格式Hugging Face datasets库会将这些 Parquet文件解码成 Arrow格式,并将数据加载到内存 pandas来读取该Parquet文件Pandas 使用 PyArrow 将Parquet数据加载到内存,但会将数据复制到了Pandas的内存空间中Polars 读取Parquet时,Polars会直接复制进Arrow的内存空间,且始终使用这块内存
Python 数据分析
Polars使用 Apache Arrow 作为内存模型,这使得它在处理数据时能够更高效地利用内存
参考
存了50TB,巨能装的Pyarrow + parquet方案 https://zhuanlan.zhihu.com/p/675767714https://pola-rs.github.io/polars-book-cn/user-guide/introduction.html