sparkr regexp\u extract函数的问题

ckx4rj1h  于 2021-05-29  发布在  Spark
关注(0)|答案(2)|浏览(504)

数据
我使用的是一个大数据集(2.8亿行),spark和r似乎可以很好地处理这个数据集。
问题
我和斯巴克有过矛盾 regexp_extract 功能。我认为这和斯特林格的类似 str_detect 但我还没能成功。的文档 regexp_extract 是有限的。你能帮我一下吗?
雷普雷克斯
这里有一个reprex,我试图识别没有空格的字符串,并将“00:01”粘贴为后缀。


# Load packages

library(tidyverse)
library(sparklyr)
library(SparkR)

# Create data

df <- data.frame(sampletaken = c("06/03/2013", "29/11/2005 8:30", "06/03/2013", "15/01/2007 12:25", "06/03/2013", "15/01/2007 12:25"))

# Create Spark connection

sc <- spark_connect(master = "local", spark_home = spark_home_dir())

# Transfer data to Spark memory

df <- copy_to(sc, df, "df", overwrite = TRUE)

# Modify data

df1 <- df %>%
  dplyr::mutate(sampletaken = ifelse(regexp_extract(sampletaken, " "), sampletaken, paste(sampletaken, "00:01")))

# Collect data as dataframe

df1 <- df1 %>% as.data.frame()
head(df1$sampletaken)

错误
错误:org.apache.spark.sql.analysisexception:无法解析'(不是regexp\u extract(df)。 sampletaken ,'',1))'由于数据类型不匹配:参数1需要布尔类型,但是'regexp\u extract(df。 sampletaken ,'',1''是字符串类型。;1号线位置80;
解决方案


# Load packages

library(tidyverse)
library(sparklyr)
library(SparkR)

# Create data

df <- data.frame(sampletaken = c("06/03/2013", "29/11/2005 8:30", "06/03/2013", "15/01/2007 12:25", "06/03/2013", "15/01/2007 12:25"))

# Create Spark connection

sc <- spark_connect(master = "local", spark_home = spark_home_dir())

# Transfer data to Spark memory

df <- copy_to(sc, df, "df", overwrite = TRUE)

# Modify data

df1 <- df %>%
  dplyr::mutate(sampletaken1 = ifelse(rlike(sampletaken, " "), sampletaken, paste(sampletaken, "00:01")))

# Collect data as dataframe

df1 <- df1 %>% as.data.frame()
head(df1$sampletaken)
lrl1mhuk

lrl1mhuk1#

我对sparkr不太熟悉,但是函数regex\u extract似乎返回一个字符串(可能是字符串中匹配的模式),而不是函数ifelse所要求的布尔值。
您可以尝试将返回值与空字符串匹配。

plupiseo

plupiseo2#

可能 rlike 如果你想找模拟电路 str_detect ,请参阅sql api文档: str rlike regexp -退货 true 如果 str 比赛 regexp ,或 false 否则。

SELECT '%SystemDrive%\Users\John' rlike '%SystemDrive%\\Users.*'
true

Column (即,在r中,而不是在sparkql中) sql() ),就像:

rlike(Column, 'regex.*pattern')

# i.e., in magrittr form

Column %>% rlike('regex.*pattern')

请注意 like 通常更有效,如果你能使用它,因为有效的 like 图案要小得多。

相关问题