如何使用sparklyr过滤部分匹配

roo*_*ror 6 r dplyr apache-spark sparklyr

我是新手(虽然熟悉spark和pyspark),我有一个非常基本的问题.我正在尝试根据部分匹配过滤列.在dplyr中,我会这样写我的操作:

businesses %>%
  filter(grepl('test', biz_name)) %>%
  head
Run Code Online (Sandbox Code Playgroud)

然后在spark数据帧上运行该代码给了我:

错误:org.apache.spark.sql.AnalysisException:未定义的函数:'GREPL'.此函数既不是已注册的临时函数,也不是在数据库'project_eftpos_failure'中注册的永久函数.第5行pos 7

use*_*411 8

与标准Spark相同,您可以使用rlike(Java正则表达式):

df <- copy_to(sc, iris) 

df %>% filter(rlike(Species, "osa"))

# or anchored
df %>% filter(rlike(Species, "^.*osa.*$")
Run Code Online (Sandbox Code Playgroud)

like(简单的SQL正则表达式):

df %>% filter(like(Species, "%osa%"))
Run Code Online (Sandbox Code Playgroud)

这两种方法也可以使用后缀表示法

df %>% filter(Species %rlike%  "^.*osa.*$")
Run Code Online (Sandbox Code Playgroud)

df %>% filter(Species %like% "%osa%")
Run Code Online (Sandbox Code Playgroud)

分别.

详情见vignette("sql-translation").

  • 完美,如此简单:我很惊讶我没有在其他任何地方或在这里找到它们:https://spark.rstudio.com/articles/guides-dplyr.html#sql-translation (3认同)