ForEach和DoParallel用完了我所有的RAM?

时间:2016-06-17 21:21:35

标签: r foreach shapefile rgdal doparallel

我需要将多个形状文件加载到R会话中。目前,我正在单独加载每个形状文件。这有效,但需要很长时间才能使用我可用CPU的15%。最近,我尝试使用ForEach和DoParallel加载形状文件:

require(foreach)
require(doParallel)
require(rgdal)
files <- c(
    "AHVENANMAA/AHVENANMAA", 
    "ETELA-KARJALA/ETELA-KARJALA", 
    "ETELA-POHJANMAA/ETELA-POHJANMAA_1", 
    "ETELA-POHJANMAA/ETELA-POHJANMAA_2", 
    "ETELA-SAVO/ETELA-SAVO_1"
)
registerDoParallel(cores = 8)
listOfCurrentProvinces <- (
    foreach(
        x = files, 
        .packages = "rgdal", 
        .inorder = FALSE
    ) %dopar% 
        readOGR(x, layer = "DR_LINKKI")
)

此方法有效并且非常快(它使用我100%的CPU)。但是,它占用了太多内存,特别是当我多次重复这个过程时。有没有什么方法可以使用ForEach和DoParallel而不会产生如此重大的内存命中?我的机器有8个处理器(4个物理和4个逻辑),并有16 GB的RAM。

1 个答案:

答案 0 :(得分:0)

我做了几件似乎有帮助的事情。

1)仅使用registerDoParallel命令注册ONCE核心数。

2)每次迭代后使用gc()

在我实施这些更改之前,我的记忆仅在4次(21次)迭代后爆炸。现在,我已经完成了6次迭代,并且可以轻松地使用50%的RAM。可用RAM的数量保持不变大约15分钟。