R中存储1.27亿行超大dataframe的最优存储格式选择咨询
大数据量DataFrame存储方案(R语言)
问题背景
CSV写入失败属于正常情况:CSV是纯文本格式,写入1.27亿行数据时需要进行大量文本转换操作,中间临时内存开销会远高于数据集本身的内存占用,仅调整内存上限很难满足需求。以下是几种更适合大样本量数据集的存储格式,均能大幅降低写入时的内存开销:
推荐存储格式及使用方法
1. RDS格式(R原生格式,优先推荐)
- 优势:R官方原生二进制序列化格式,无需安装额外包即可使用,会完整保留数据的所有属性(比如你数据中的factor因子结构不会丢失),压缩率高,读写时的内存开销极低
- 操作代码:
写入:saveRDS(your_dataframe, file = "species_dataset.rds", compress = "xz")
读取:loaded_df <- readRDS("species_dataset.rds")
2. Parquet格式(跨语言通用列式存储)
- 优势:行业通用的列式存储格式,压缩率比RDS更高,支持按列读取、无需全量加载即可访问部分字段,也可被Python、Java等其他语言直接读取,适合需要跨工具协作的场景
- 操作代码(需先安装arrow包:
install.packages("arrow")):
写入:arrow::write_parquet(your_dataframe, sink = "species_dataset.parquet", compression = "zstd")
读取:loaded_df <- arrow::read_parquet("species_dataset.parquet")
3. FST格式(高速读写专属格式)
- 优势:专门为R优化的二进制格式,读写速度是所有常见格式中最快的一档,支持随机读取指定行/列,适合需要频繁读写部分数据的场景
- 操作代码(需先安装fst包:
install.packages("fst")):
写入:fst::write_fst(your_dataframe, path = "species_dataset.fst", compress = 90)
读取:loaded_df <- fst::read_fst("species_dataset.fst")
选择建议
- 仅在R环境下使用数据:优先选RDS,操作最简单,兼容性最好
- 需要跨语言使用数据/只需要访问部分字段:选Parquet
- 对读写速度有极高要求:选FST
内容的提问来源于stack exchange,提问作者Jose
相关产品推荐
相关产品推荐

