Feather 文件格式#
Feather 是一种用于存储 Arrow 表格或数据帧(来自 Python 或 R 等语言)的可移植文件格式,它在内部利用了 Arrow IPC 格式。Feather 是在 Arrow 项目的早期作为概念验证创建的,用于为 Python(pandas)和 R 提供快速、与语言无关的数据帧存储。Feather 有两个文件格式版本
版本 2 (V2),默认版本,在磁盘上完全表示为 Arrow IPC 文件格式。V2 文件支持存储所有 Arrow 数据类型以及使用 LZ4 或 ZSTD 压缩。V2 最初在 Apache Arrow 0.17.0 中可用。
版本 1 (V1),从 2016 年开始提供的旧版本,已被 V2 替换。V1 文件与 Arrow IPC 文件不同,并且缺少许多功能,例如存储所有 Arrow 数据类型的能力。V1 文件也缺乏压缩支持。我们打算在可预见的未来保持对 V1 的读取支持。
pyarrow.feather
模块包含了该格式的读写函数。 write_feather()
接受 Table
或 pandas.DataFrame
对象。
import pyarrow.feather as feather
feather.write_feather(df, '/path/to/file')
read_feather()
将 Feather 文件读取为 pandas.DataFrame
。 read_table()
将 Feather 文件读取为 Table
。在内部,read_feather()
只是简单地调用 read_table()
,并将结果转换为 pandas。
# Result is pandas.DataFrame
read_df = feather.read_feather('/path/to/file')
# Result is pyarrow.Table
read_arrow = feather.read_table('/path/to/file')
这些函数可以读取和写入文件路径或类文件对象。例如:
with open('/path/to/file', 'wb') as f:
feather.write_feather(df, f)
with open('/path/to/file', 'rb') as f:
read_df = feather.read_feather(f)
输入到 read_feather
的文件必须支持查找。
使用压缩#
从 Apache Arrow 0.17.0 版本开始,Feather V2 文件(默认版本)支持两个快速的压缩库:LZ4(使用帧格式)和 ZSTD。如果 LZ4 可用,则默认使用 LZ4(如果您通过正常的包管理器获取了 pyarrow,则应该可用)。
# Uses LZ4 by default
feather.write_feather(df, file_path)
# Use LZ4 explicitly
feather.write_feather(df, file_path, compression='lz4')
# Use ZSTD
feather.write_feather(df, file_path, compression='zstd')
# Do not compress
feather.write_feather(df, file_path, compression='uncompressed')
请注意,默认的 LZ4 压缩通常会产生更小的文件,而不会牺牲太多读取或写入性能。在某些情况下,由于减少了磁盘 I/O 需求,LZ4 压缩文件读取和写入的速度可能比未压缩文件更快。
写入版本 1 (V1) 文件#
为了与不支持版本 2 文件的库兼容,您可以通过将 version=1
传递给 write_feather
来写入版本 1 格式。我们打算在可预见的未来继续维护对 V1 的读取支持。