r - 在 r 中合并两个大型数据集时的内存分配问题
问题描述
我需要将两个相对较大的数据集合并到R
. A
有651,052 个观察值和 118 个变量,B
包含38,208 个观察值和 41 个变量,从字面上看,我无法进一步减小数据量。应用object.size()
函数显示,这两个数据集分别占用了610 Mb 和 13 Mb的内存。
我使用的机器有一个 64 位 CPU 和 32GB 内存。然而,当尝试合并这些文件时,会R
出现内存分配错误:Error: cannot allocate vector of size x Mb
!我检查了关于 SO 的类似帖子并尝试了许多建议的解决方案,但在我的情况下它们都没有效果:我检查了内存限制,使用memory.limit()
which 返回32684
表明 R 可以访问我计算机上的最大可用内存。此外,使用包中的merge
函数data.table
也无法解决问题,并产生内存分配错误。
我能够分成两部分并按照打击程序分别A
合并(实际上是 a left_join
)每个部分:B
# open fresh R session
load(A)
load(B)
part_1 <- left_join(first_half_A, B)
save(part_1)
# close R
# re-open R
load(A)
load(B)
part_2 <- left_join(second_half_A, B)
save(part_2)
# close R
生成的部分在磁盘上占据了周围200 Mb
,但是当我将它们加载到磁盘中时,R
它们的大小会急剧增加并且几乎占据25 Gb
,这与我希望以R
这种方式重新加载时使这些部分具有更易于管理的大小相反,这使我无法同时拥有它们已加载,因此我可以使用bind_rows
.
考虑到添加额外的 RAM 或使用 AWS 等平台不是一种选择,您有什么建议来克服这个问题?一个最好不要进入SQL
世界的解决方案是非常受欢迎的。
PS。下面你可以看到sessionInfo()
我机器上的输出:
> 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 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
第一次更新
帮助我完成合并的原因是在可能的情况下更改了一些变量的类型,主要是numeric
为了integer
进一步减少数据大小。然而,内存分配问题仍然存在,因为合并的数据集包含 47M 行和 124 个变量,而在新的 R 会话中加载时,磁盘上仅占用 235 Mb 占用了整个 32 Gb 的 RAM,并且没有更多空间用于即将进行的计算量也很大的分析,例如估计多个混合模型。我将非常感谢有关这种情况的任何建议,这将有助于我继续进行。
解决方案
推荐阅读
- asp.net-core - 具有多个接口的 ASP.NET Core 多依赖注入
- babeljs - 多个条目 + 带有 rollup 和 rollup-plugin-babel 的 preserveModules - 为什么 _rollupPluginBabelHelpers.js 中不包含所有帮助程序?
- javascript - 使用 javascript 获取鼠标移动方向
- swiftui - SwiftUI UITextView 协调器不起作用
- clojure - Clojure boot-clj中的“RELEASE”是什么意思?
- python - 如何跳过非营业时间向熊猫日期时间添加小时数
- c++ - 为什么 reinterpret_cast 在某些情况下有效,而在其他情况下无效?
- javascript - 如何创建带有可编辑的预填充文本的文本框?
- java - 选择所有具有匹配列名的表
- python - 在Python中将非固定键json转换为csv文件