R 加快分组数据的处理速度 更新:
我尝试了亚当的方法,成功了。使用8个核,处理只需20分钟。到目前为止这很好 但我遇到了另一个问题:R 加快分组数据的处理速度 更新:,r,dplyr,multiprocessing,r-future,R,Dplyr,Multiprocessing,R Future,我尝试了亚当的方法,成功了。使用8个核,处理只需20分钟。到目前为止这很好 但我遇到了另一个问题:foreach的%dopar%操作符将工作区分叉n次(等于注册的内核数)。这本身并没有问题,但对于20GB的数据集,这将很快变得难看 因此,对原始问题的一个限制是:在不将整个数据集在内存中分叉n次的情况下,是否可以做到这一点 情况: 我需要处理一个大的TIBLE(>3000万行)。正在对TIBLE进行分组,并为每个组调用一个函数 在第一步中,我通过仅提取列name中共享值的行来减少数据集,如下所示:
foreach
的%dopar%
操作符将工作区分叉n次(等于注册的内核数)。这本身并没有问题,但对于20GB的数据集,这将很快变得难看
因此,对原始问题的一个限制是:在不将整个数据集在内存中分叉n次的情况下,是否可以做到这一点
情况:
我需要处理一个大的TIBLE(>3000万行)。正在对TIBLE进行分组,并为每个组调用一个函数
在第一步中,我通过仅提取列name
中共享值的行来减少数据集,如下所示:
重复%myFunction(,myOtherArgument=myOtherArgument)
%>%解组
使用groupu\u by
对重复项进行分组通常会导致约>500k个组。每个组都由myFunction()
处理。目前,这一过程大约需要90分钟,这是可以的,但远远不能令人满意
问题:
有没有办法加快这些小组的处理速度,使这项任务不需要90分钟,但所需时间明显减少
(包括但不限于多处理)如果使用data.table
包,可能会加快处理速度。您也可以尝试使用dtplyr
,它被支持使用与dplyr
相同的语法,但使用数据。table
但将所有内容转换为数据。table
也可以尝试使用group_split()
将tible
拆分为组上拆分的列表。然后通过%dopar%
@Adam将列表传递到一个并行框架中,例如foreach
,这很有帮助,但我遇到了另一个问题。我已经相应地更新了这个问题。无论如何谢谢你!也许试着把它分成几批?那么一个循环中的一个循环?这样,每次并行迭代只传递一个子集?您能确认大部分时间都花在运行myFunction()
上吗?您是否使用summary()
?