并行运行多个R功能

时间:2018-05-29 21:54:32

标签: r foreach data.table doparallel

我有一个数据集,数据列很少,行数超过1亿,作为data.table对象。我想基于其他列对某些列进行组操作。例如,计算“d”列中每个类别的列“a”的唯一元素。

my_data[, a_count := uniqueN(col_a), col_d]

我有许多这些操作是相互独立的,并行运行它们会很棒。我找到了以下代码,它们将并行运行不同的函数。

fun1 = function(x){
  x[, a_count := uniqueN(col_a), col_d]
  return(x[, .(callId, a_count)])
}
fun2 = function(x){
  x[, b_count := uniqueN(col_b), col_d]
  return(x[, .(callId, b_count)])
}
fun3 = function(x){
  x[, c_count := uniqueN(col_c), col_d]
  return(x[, .(callId, c_count)])
}

tasks = list(job1 = function(x) fun1(x),
             job2 = function(x) fun2(x),
             job3 = function(x) fun3(x))

cl = makeCluster(3)
clusterExport(cl, c('fun1', 'fun2', 'fun3', 'my_data', 'data.table', 'uniqueN'))

out = clusterApply( 
  cl,
  tasks,
  function(f) f(my_data)
)
stopCluster(cl)

如何改进此解决方案?例如,将基本列仅传递给每个函数而不是整个数据帧会很棒。

0 个答案:

没有答案