Параллельный Fuzzyjoin

Я пытаюсь ускорить fuzzyjoin с параллельной обработкой. У меня есть два фрейма данных, каждый с несколькими тысячами строк, каждый из которых должен быть частично регулярным выражением. Однако в настоящее время это занимает более 40 минут на одном ядре. Фрейм данных выглядит так:

require(fuzzyjoin)

df1 <- data.frame(first_last = c('Jackie S', 'James P', 'Jenny C', 'Jack N'),
                  age = sample(18:65, 4), 
                  stringsAsFactors = F)
df2 <- data.frame(id = c(1:6), 
                  full_name = c('Jackie Smith, CPA', 
                                'Joe Campbell III',
                                'James Park, MD', 
                                'Joyce May, DDS',
                                'Jenny Cox',
                                'Jack Null Jr'), 
                  stringsAsFactors = F)

merged <- regex_right_join(df2, df1, by = c('full_name' = 'first_last'))

(Я использую regex_right_join, потому что regex_left_join не работает).

Для запуска с параллельной обработкой я пытался с

require(doParallel)
require(foreach)

cl <- makeCluster(4)
registerDoParallel(cl)

parallel_merged <- foreach(i=1, .combine = rbind) %dopar%
  fuzzyjoin::regex_right_join(df2, df1, by = c('full_name' = 'first_last'))

Пользовательское и системное время всегда очень мало при использовании doParallel а также foreach, Оба < 1 с. Однако прошедшее время с foreach всегда примерно такой же, как работа на одном ядре (более 40 минут).

0 ответов

Другие вопросы по тегам