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 默认使用(如果通过正常的包管理器获取 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 压缩通常会生成小得多的文件,而不会牺牲太多读写性能。在某些情况下,由于减少了磁盘 IO 需求,LZ4 压缩文件的读写速度可能比未压缩文件更快。
写入版本 1 (V1) 文件#
为了与不支持版本 2 文件的库兼容,您可以通过向 write_feather 传递 version=1 来写入版本 1 格式。我们打算在可预见的未来保持对 V1 的读取支持。