Счетчик совпадений с использованием Sparklyr - PullRequest
0 голосов
/ 31 октября 2018

Я пытался подсчитать сопоставление с образцом, используя Sparklyr.

Я пытаюсь посчитать, сколько раз шаблон ";" появляется в переменной room_number

Вот моя таблица:

room_number      
A12;A19        
A13            
A15;A14;A20 

Когда я не использую Sparklyr, я могу использовать эту функцию:

count.matches <- function(pat, vec) sapply(regmatches(vec, gregexpr(pat, vec)), length)

mytable <- mytable %>%
mutate(number_pattern = mapply(count.matches, c(';'), list(room_number)))

Я получаю:

room_number    number_pattern    
A12;A19        1
A13            0
A15;A14;A20    2

если я пытаюсь применить код в распределенном R с помощью sparklyr, используя spark_apply вместо mapply, я получаю следующее сообщение:

mytable  <- mytable  %>%
+   mutate(number_pattern = spark_apply(count.matches, c(';'), list(room_number)))
glimpse(mytable)

Ошибка в UseMethod («escape»): нет применимого метода для escape, примененного к объекту класса "function"

У вас есть какие-нибудь советы? Спасибо за помощь мне

1 Ответ

0 голосов
/ 31 октября 2018

spark_apply является автономной функцией и не может использоваться в mutate. Также он не имеет того же API, что и mapply:

count.matches <- function(pat) function(df) {
  f <- function(vec) sapply(regmatches(vec, gregexpr(pat, vec)), length)
  dplyr::mutate(df, number_pattern = f(room_number))
}

mytable %>% spark_apply(count.matches(";"))
...