R语言合并大型数据集的内存分配问题及分析困境
R内存不足:合并大型数据集后无法加载开展后续分析(求无SQL/云平台的本地解决方案)
我最近在R里处理大型数据集合并的时候遇到了棘手的内存问题,试了好几种方法都没解决,想请教下有没有本地的解决方案(不能用SQL,也没法用AWS这类云平台)。
先说说我的基础情况:
- 数据集A:651,052条观测、118个变量,用
object.size()检测内存占用610MB;数据集B:38,208条观测、41个变量,内存占用13MB,两者都没法再缩减规模。 - 我的设备是64位CPU,配备32GB内存,用
memory.limit()检查过,R已经获取了设备最大可用内存(返回值32684)。
我尝试过的方法及遇到的问题
直接合并失败:不管用base R的
merge()还是data.table包的merge函数,都直接抛出内存分配错误:Error: cannot allocate vector of size x Mb!拆分数据集合并后无法拼接:我把数据集A拆成两部分,分两次和B做
left_join:
# 第一次R会话 load("A.RData") load("B.RData") part_1 <- dplyr::left_join(first_half_A, B) save(part_1, file = "part_1.RData") # 关闭当前R会话 # 第二次R会话 load("A.RData") load("B.RData") part_2 <- dplyr::left_join(second_half_A, B) save(part_2, file = "part_2.RData")
生成的两个文件在磁盘上总共约200MB,但加载到R中后内存占用骤增至近25GB,根本没法同时加载两部分数据用bind_rows()合并。
- 变量类型转换后合并成功,但后续分析卡壳:我把部分
numeric类型变量转成integer后终于完成了合并,得到的数据集有4700万行、124个变量——磁盘上仅占235MB,但加载到新的R会话后直接占满了32GB内存,完全没法开展后续的计算密集型分析(比如多水平混合模型估计)。
我的R环境信息
> sessionInfo() R version 3.6.2 (2019-12-12) Platform: x86_64-w64-mingw32/x64 (64-bit) Running under: Windows 10 x64 (build 16299) Matrix products: default locale: [1] LC_COLLATE=English_Netherlands.1252 LC_CTYPE=English_Netherlands.1252 [3] LC_MONETARY=English_Netherlands.1252 LC_NUMERIC=C [5] LC_TIME=English_Netherlands.1252 attached base packages: [1] stats graphics grDevices utils datasets methods base loaded via a namespace (and not attached): [1] compiler_3.6.2 tools_3.6.2 knitr_1.28 xfun_0.12
现在的核心需求是:在不能增加内存、不能使用云平台、不能用SQL的前提下,怎么解决这个内存瓶颈问题,让我能顺利推进后续分析?
内容的提问来源于stack exchange,提问作者MoRA
相关产品推荐
相关产品推荐

