在 Spark 中工作时替代 ``stringr::str_detect``
Alternative for ``stringr::str_detect`` when working in Spark
我在本地设备上使用 RStudio 工作了几年,最近开始使用 Spark(版本 3.0.1)。当我尝试在 Spark 中 运行 stringr::str_detect()
时,我 运行 遇到了一个意想不到的问题。显然 str_detect()
在 SQL 中没有等价物。我正在寻找替代方案,最好是 R.
这是我在 运行 宁 str_detect()
本地与 Spark 中的预期结果的示例。
# Load packages
library(dplyr)
library(stringr)
library(sparklyr)
# Example tibble
df <- tibble(foodtype = c("potatosalad", "potato", "salad"))
df
---
# A tibble: 3 x 1
foodtype
<chr>
1 potatosalad
2 potato
3 salad
---
# Expected result when using R
df %>%
mutate(contains_potato = str_detect(foodtype, "potato"))
---
# A tibble: 3 x 2
foodtype contains_potato
<chr> <lgl>
1 potatosalad TRUE
2 potato TRUE
3 salad FALSE
---
但是当我 运行 将此代码放在 Spark 数据帧上时 returns 出现以下错误消息:“错误:str_detect() 在此 SQL 中不可用变体”。
# Connect to local Spark cluster
sc <- spark_connect(master = "local", version = "3.0")
# Copy tibble to Spark cluster
df_spark <- copy_to(sc, df)
df_spark
# Error when using str_detect with Spark
df_spark %>%
mutate(contains_potato = str_detect(foodtype, "potato"))
---
Error: str_detect() is not available in this SQL variant
---
str_detect()
相当于Spark的rlike
函数。
我不将 spark 与 R 一起使用,但像这样的东西应该可以工作:
df_spark %>% mutate(contains_potato = foodtype %rlike% "potato")
dplyr
在没有 dplyr 等价物时接受编写为 R 函数的 Spark 函数:
df_spark %>% mutate(contains_potato = rlike(foodtype, "potato"))
我在本地设备上使用 RStudio 工作了几年,最近开始使用 Spark(版本 3.0.1)。当我尝试在 Spark 中 运行 stringr::str_detect()
时,我 运行 遇到了一个意想不到的问题。显然 str_detect()
在 SQL 中没有等价物。我正在寻找替代方案,最好是 R.
这是我在 运行 宁 str_detect()
本地与 Spark 中的预期结果的示例。
# Load packages
library(dplyr)
library(stringr)
library(sparklyr)
# Example tibble
df <- tibble(foodtype = c("potatosalad", "potato", "salad"))
df
---
# A tibble: 3 x 1
foodtype
<chr>
1 potatosalad
2 potato
3 salad
---
# Expected result when using R
df %>%
mutate(contains_potato = str_detect(foodtype, "potato"))
---
# A tibble: 3 x 2
foodtype contains_potato
<chr> <lgl>
1 potatosalad TRUE
2 potato TRUE
3 salad FALSE
---
但是当我 运行 将此代码放在 Spark 数据帧上时 returns 出现以下错误消息:“错误:str_detect() 在此 SQL 中不可用变体”。
# Connect to local Spark cluster
sc <- spark_connect(master = "local", version = "3.0")
# Copy tibble to Spark cluster
df_spark <- copy_to(sc, df)
df_spark
# Error when using str_detect with Spark
df_spark %>%
mutate(contains_potato = str_detect(foodtype, "potato"))
---
Error: str_detect() is not available in this SQL variant
---
str_detect()
相当于Spark的rlike
函数。
我不将 spark 与 R 一起使用,但像这样的东西应该可以工作:
df_spark %>% mutate(contains_potato = foodtype %rlike% "potato")
dplyr
在没有 dplyr 等价物时接受编写为 R 函数的 Spark 函数:
df_spark %>% mutate(contains_potato = rlike(foodtype, "potato"))