r - 使用 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)
解决方案
推荐阅读
- java - 如何在不依赖数据库的情况下将 JUnit 测试应用于我的 Insert()、update()、delete() 方法(使用 Mockito)
- sql - 简单案例的子查询性能
- python - 我不断收到一个错误,称为“int”对象没有属性“替换”
- node-red - Node-red 使用哪些图形库来绘制拖放节点及其连接
- asp.net - AngularJS 仅在反复刷新页面时才有效
- mysql - SQL排序链表
- linux - 未发现双模蓝牙(智能就绪)设备的 GATT 特征
- c++ - C++ - 使用基于范围的for循环将字符值分配给向量中的字符串不会分配值
- java - Android文本视图中的多行打印使我的应用程序崩溃
- prolog - 如何在递归Prolog中将数据插入列表