数据
我使用的是一个大数据集(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)
2条答案
按热度按时间lrl1mhuk1#
我对sparkr不太熟悉,但是函数regex\u extract似乎返回一个字符串(可能是字符串中匹配的模式),而不是函数ifelse所要求的布尔值。
您可以尝试将返回值与空字符串匹配。
plupiseo2#
可能
rlike
如果你想找模拟电路str_detect
,请参阅sql api文档:str rlike regexp
-退货true
如果str
比赛regexp
,或false
否则。在
Column
(即,在r中,而不是在sparkql中)sql()
),就像:请注意
like
通常更有效,如果你能使用它,因为有效的like
图案要小得多。