首页 > 解决方案 > 使用 Future 包在 R 中进行并行处理

问题描述

我正在尝试使用“Future”包并行运行一堆任务,由于某种原因,它无法找到我希望它找到的数据帧。我创建了下面的示例程序来展示我在做什么。我应该将全局数据导出到每个子进程吗?我目前没有这样做,因为我在某处读到它是在使用多会话计划时自动完成的。知道我做错了什么吗?

if(!require('sqldf')) install.packages('sqldf')
if(!require('future')) install.packages('future')
if(!require('doFuture')) install.packages('doFuture')
if(!require('future.apply')) install.packages('future.apply')

library('sqldf')
library('future')
library("doFuture")
library("future.apply")

registerDoFuture()
plan(multisession, globals = TRUE, workers=5)
options(future.globals.maxSize=+Inf)

DATA_ASIA <- data.frame(c('NAME1', 'NAME2'))
DATA_EUROPE <- data.frame(c('NAME1', 'NAME2', 'NAME3'))
DATA_USA <- data.frame(c('NAME1', 'NAME2', 'NAME3', 'NAME4'))
DATA_AFRICA <- data.frame(c('NAME1'))

LEVEL <- c('ASIA_LEVEL', 'EUROPE_LEVEL', 'USA_LEVEL', 'AFRICA_LEVEL')
R_PROG <- c('SELECT COUNT(*) as COUNT FROM DATA_ASIA', 
            'SELECT COUNT(*) as COUNT FROM DATA_EUROPE', 
            'SELECT COUNT(*) as COUNT FROM DATA_USA', 
            'SELECT COUNT(*) as COUNT FROM DATA_AFRICA')

RULES_ALL <- data.frame(LEVEL, R_PROG)

RULES_ASIA <- subset(RULES_ALL, LEVEL == 'ASIA_LEVEL')
RESULT_ASIA <- future(data.table::rbindlist(lapply(1:nrow(RULES_ASIA), function(x) sqldf(RULES_ASIA$R_PROG[x])), use.names = TRUE, fill=TRUE))

RULES_EUROPE <- subset(RULES_ALL, LEVEL == 'EUROPE_LEVEL')
RESULT_EUROPE <- future(data.table::rbindlist(lapply(1:nrow(RULES_EUROPE), function(x) sqldf(RULES_EUROPE$R_PROG[x])), use.names = TRUE, fill=TRUE))

RULES_USA <- subset(RULES_ALL, LEVEL == 'USA_LEVEL')
RESULT_USA <- future(data.table::rbindlist(lapply(1:nrow(RULES_USA), function(x) sqldf(RULES_USA$R_PROG[x])), use.names = TRUE, fill=TRUE))

RULES_AFRICA <- subset(RULES_ALL, LEVEL == 'AFRICA_LEVEL')
RESULTS_AFRICA <- future(data.table::rbindlist(lapply(1:nrow(RULES_AFRICA), function(x) sqldf(RULES_AFRICA$R_PROG[x])), use.names = TRUE, fill=TRUE))

RESULT_ASIA <- value(RESULT_ASIA)
RESULT_EUROPE <- value(RESULT_EUROPE)
RESULT_USA <- value(RESULT_USA)
RESULTS_AFRICA <- value(RESULTS_AFRICA)

标签: rparallel-processingr-future

解决方案


推荐阅读