使用Sparklyr计数模式匹配

时间:2018-10-31 16:01:28

标签: r apache-spark sparklyr

我一直在尝试使用Sparklyr计算模式匹配。

我正在尝试计算模式“;”的时间出现在变量room_number

这是mytable:

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)
  

UseMethod(“ escape”)中的错误:     没有适用于“功能”类对象的“转义”适用方法

您有什么建议吗? 感谢您的帮助

1 个答案:

答案 0 :(得分:1)

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(";"))