0

更新:

我尝试了@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 分钟,而是显着减少时间?

(包括但不限于多处理)

4

0 回答 0