Arrow IPC 与 Feather

Arrow IPC vs Feather

Arrow IPC 和 Feather 有什么区别?

official Arrow documentation 说:

Version 2 (V2), the default version, which is exactly represented as the Arrow IPC file format on disk. V2 files support storing all Arrow data types as well as compression with LZ4 or ZSTD. V2 was first made available in Apache Arrow 0.17.0.

虽然vaex, which is an alternative to pandas, has two different functions, one for Arrow IPC and one for Feather. polars,另一个pandas备选方案,表明Arrow IPC和Feather是一样的。

TL;DR Arrow IPC 文件格式Feather V2.

没有区别

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

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

What about the “Feather” file format?

The Feather v1 format was a simplified custom container for writing a subset of the Arrow format to disk prior to the development of the Arrow IPC file format. “Feather version 2” is now exactly the Arrow IPC file format and we have retained the “Feather” name and APIs for backwards compatibility.

所以 IPC == Feather(V2)。有些地方提到Feather的意思是Feather(V1),不同于IPC文件格式。然而,这似乎不是这里的问题:Polars 和 Vaex 似乎使用 Feather 来表示 Feather(V2) ").

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

export_feather 始终写入 IPC 文件格式 (==FeatherV2),而 export_arrow 让您在 IPC 文件格式和 IPC 流格式之间进行选择。查看 where export_feather was added 我认为混淆可能源于 PyArrow APIs 使得如何使用 Feather API 方法(这是一种用户友好的便利)启用压缩变得显而易见,但不是IPC 文件编写器(export_arrow 使用)。但最终,写入的格式是相同的。