基于相同数据的两个feather文件体积相差一倍的原因咨询
Feather文件内容一致但体积相差一倍的原因分析
导致该差异的核心原因几乎都来自导出环节的配置与默认规则差异,最常见的可能性如下:
- 数据类型存储精度差异
这是最匹配你场景(体积刚好差一倍)的原因:Python的pandas在拼接、导出数据时会自动做类型窄化优化,比如取值范围允许的情况下会把整数存为int32、浮点数存为float32;而R的arrow/feather导出工具默认会采用更高位的通用类型,比如所有整数默认存int64、数值默认存双精度float64,单个列的存储空间直接翻倍,最终总体积也接近翻倍。 - 压缩配置差异
Python的pandas.to_feather()默认启用zstd压缩,且默认压缩级别较高;而R侧导出feather时如果手动关闭了压缩、或者使用了更低压缩比的算法(如lz4)、压缩级别设置更低,都会导致文件体积更大。 - 元数据冗余
R侧拼接数据的流程可能会给列、数据表附加额外的自定义元数据(比如原始季度文件的来源标记、R特有的属性字段),这部分内容不影响数据计算结果,但会占用额外的存储空间,不过该因素一般不会导致体积差一倍,多为次要影响因素。 - 存储分块/对齐差异
不同语言的arrow实现对feather文件的分块策略、字节对齐规则有细微差异,极端情况下也会导致一定的体积差,但该因素影响占比极低。
排查验证方法
- 分别读取两个文件输出各列类型:
df1.dtypes、df2.dtypes,对比是否存在同含义列的类型位数差异 - 用pyarrow的接口读取文件元数据确认压缩配置:
import pyarrow.feather as feather meta1 = feather.read_metadata("文件1.feather") meta2 = feather.read_metadata("文件2.feather") print(meta1.compression, meta2.compression) print(meta1.column_types)
- 核对R侧导出feather的代码,确认
compression、compression_level等参数的配置。
内容的提问来源于stack exchange,提问作者Mofongo
相关产品推荐
相关产品推荐

