Запустите несколько функций R параллельно - PullRequest
0 голосов
/ 30 мая 2018

У меня есть набор данных с несколькими числовыми столбцами и более 100 миллионами строк в качестве объекта data.table.Я хотел бы сделать групповые операции над некоторыми из столбцов на основе других столбцов.Например, подсчитать уникальные элементы столбца «а» на каждую категорию в столбце «d».

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)

Как я могу улучшить это решение?Например, было бы здорово просто передать только необходимые столбцы каждой функции, а не весь фрейм данных.

...