Arrow IPC vs Feather

问题描述

Arrow IPC 和 Feather 有什么区别?

official documentation 说:

Version 2 (V2),认版本,准确表示为 磁盘上的 Arrow IPC 文件格式。 V2 文件支持存储所有 Arrow 数据类型以及使用 LZ4 或 ZSTD 进行压缩。 V2是第一次制造 在 Apache Arrow 0.17.0 中可用。

虽然 vaex 是 Pandas 的替代品,但有两种不同的功能,一种用于 Arrow IPC,一种用于 Feather。 polars 是另一种 Pandas 替代方案,表明 Arrow IPC 和 Feather 是相同的。

解决方法

TL;DR Arrow IPC 文件格式Feather V2 之间没有区别。

由于 Feather 的两个版本以及 Arrow IPC 文件格式与 Arrow IPC 流格式的关系,存在一些混淆。

对于 Feather 的两个版本,请参阅 FAQ entry

“Feather”文件格式怎么样?

Feather v1 格式是一种简化的自定义容器,用于在开发 Arrow IPC 文件格式之前将 Arrow 格式的一个子集写入磁盘。 “Feather 版本 2”现在完全是 Arrow IPC 文件格式,我们保留了“Feather”名称和 API 以实现向后兼容性。

所以IPC == Feather(V2)。有些地方提到 Feather 意思是 Feather(V1),它不同于 IPC 文件格式。然而,这似乎不是这里的问题:Polars 和 Vaex 似乎使用 Feather 来表示 Feather(V2)(尽管 Vaex 有点误导性地说“Feather 完全表示为磁盘上的 Arrow IPC 文件格式,但也支持压缩").

Vaex 公开 export_arrowexport_feather。这与 Arrow 的另一点有关,因为它定义了 IPC 流格式和 IPC 文件格式。它们的区别在于文件格式有一个魔法字符串(用于文件识别)和一个页脚(用于支持随机访问读取)(documentation)。

export_feather 总是写入 IPC 文件格式 (==FeatherV2),而 export_arrow 允许您在 IPC 文件格式和 IPC 流格式之间进行选择。看看 where export_feather was added 我认为混乱可能源于 PyArrow API 使得如何使用 Feather API 方法启用压缩(这是一种用户友好的便利)而不是使用 IPC 文件编写器(这就是{ {1}} 次使用)。但最终,写入的格式是相同的。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...