Как отфильтровать частичное совпадение с помощью sparklyr

Я новичок в Sparklyr (но знаком с Spark и Pyspark), и у меня есть действительно простой вопрос. Я пытаюсь отфильтровать столбец на основе частичного совпадения. В dplyr я бы написал свою операцию так:

businesses %>%
  filter(grepl('test', biz_name)) %>%
  head

Однако запуск этого кода в искровом фрейме данных дает мне:

Ошибка: org.apache.spark.sql.AnalysisException: неопределенная функция: «GREPL». Эта функция не является ни зарегистрированной временной функцией, ни постоянной функцией, зарегистрированной в базе данных 'project_eftpos_failure' .; строка 5 поз.7


person rookie error    schedule 18.09.2017    source источник


Ответы (1)


Как и в стандартном Spark, вы можете использовать rlike (регулярные выражения Java):

df <- copy_to(sc, iris) 

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

# or anchored
df %>% filter(rlike(Species, "^.*osa.*$"))

или like (простые регулярные выражения SQL):

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

Оба метода могут также использоваться с суффиксной нотацией как

df %>% filter(Species %rlike%  "^.*osa.*$")

а также

df %>% filter(Species %like% "%osa%")

соответственно.

Подробнее см. vignette("sql-translation").

person zero323    schedule 18.09.2017
comment
Идеально, так просто: О, я удивлен, что не нашел этого нигде или здесь: spark.rstudio.com/articles/guides-dplyr.html#sql-translation - person rookie error; 19.09.2017
comment
Спасибо за ответ @rookieerror, но ссылка сейчас мертва. - person dalloliogm; 01.07.2019
comment
Вы можете использовать операторы Hive и определяемые пользователем функции (UDF) cwiki.apache. org / confluence / display / Hive / LanguageManual + UDF - person nathaneastwood; 08.08.2019