使用 Sparklyr 计数模式匹配

Count Pattern Matching using Sparklyr

我一直在尝试使用 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

如果我尝试使用 spark_apply 而不是 mapply 在带有 sparklyr 的分布式 R 中应用代码,我会收到以下消息:

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

Error in UseMethod("escape") : no applicable method for 'escape' applied to an object of class "function"

你有什么建议吗? 谢谢你帮助我

spark_apply 是一个独立函数,不能在 mutate 中使用。它也没有与 mapply:

相同的 API
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(";"))