更新:
我尝试了@Adam 的方法,它成功了。使用 8 个核心,处理只需要 20 分钟。到目前为止这很棒。
但是我遇到了另一个问题:foreach
's %dopar%
operator forks 工作区n
时间(等于注册的核心数)。这本身没有问题,但是对于 20 GB 的数据集,这将很快变得丑陋。
所以对原始问题的限制:可以在没有整个数据集在内存分叉n
时间的情况下完成吗?
情况:
我需要处理一个大标题(>3000 万行)。tibble 正在分组,并为每个组调用一个函数。
在第一步中,我通过仅提取那些在列中共享一个值的行来减少数据集,name
如下所示:
duplicates <- data[duplicated(data$name, fromLast=FALSE) |
duplicated(data$name, fromLast=TRUE),]
在那之后,我如上所述处理这些重复项:
myTibble <- duplicated %>% group_by(name)
%>% myFunction(., myOtherArgument=myOtherArgument)
%>% ungroup
重复的分组group_by
通常导致大约>500k 组。每个组都由 处理myFunction()
。现在,这个处理大约需要90 分钟,这还可以,但远不能令人满意。
问题:
有没有办法加快这些组的处理速度,这样这项任务就不会花费 90 分钟,而是显着减少时间?
(包括但不限于多处理)