数据
我处理的是一个大型数据集(2.8亿行),Spark和R看起来很好地工作。
问题
SparkR的regexp_extract
函数遇到问题。我认为它的工作方式类似于Stringr的str_detect
,但我还没有设法使其工作。 regexp_extract
的文档有限。您能帮我一下吗?
Reprex
这里是一个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:由于数据类型不匹配而无法解析'(NOT regexp_extract(df。sampletaken
,'',1)))':参数1需要布尔类型,但是,'regexp_extract (df。sampletaken
,'',1)'是字符串类型。第1行pos 80;
我不熟悉SparkR,但似乎函数regex_extract返回一个字符串(可能是字符串中的匹配模式),而不是ifelse函数所要求的布尔值。
您可以尝试将返回值与空字符串进行匹配。
发件人:https://docs.data.world/documentation/sql/reference/functions/regexp_extract.html
参考/功能/REGEXP_EXTRACT
在搜索操作中用于复杂模式匹配(包括重复和交替)的字符串函数。有关正则表达式的Java格式的更多信息,请参见:https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html。参数类型说明输入字符串
用于搜索与正则表达式匹配的字符串的字符串。正则表达式字符串
要匹配的正则表达式组整数
可选的正则表达式组号,定义将返回匹配字符串的哪一部分返回:字符串