使用Hive命令regexp_extract
我试图更改以下字符串:
201703170455 to 2017-03-17:04:55
和来自:
2017031704555675 to 2017-03-17:04:55.0010
我在sparklyr中尝试使用与R:中的gsub一起使用的代码
newdf<-df%>%mutate(Time1 = regexp_extract(Time, "(....)(..)(..)(..)(..)", "\\1-\\2-\\3:\\4:\\5"))
和这段代码:
newdf<-df%>mutate(TimeTrans = regexp_extract("(....)(..)(..)(..)(..)(....)", "\\1-\\2-\\3:\\4:\\5.\\6"))
但根本不起作用。有关如何使用regexp_extract执行此操作的任何建议吗?
答案 0 :(得分:5)
Apache Spark使用Java正则表达式方言而非R,并且组应使用$
引用。此外regexp_replace
用于extract a single group by a numeric index。
您可以使用regexp_replace
:
df <- data.frame(time = c("201703170455", "2017031704555675"))
sdf <- copy_to(sc, df)
sdf %>%
mutate(time1 = regexp_replace(
time, "^(....)(..)(..)(..)(..)$", "$1-$2-$3 $4:$5" )) %>%
mutate(time2 = regexp_replace(
time, "^(....)(..)(..)(..)(..)(....)$", "$1-$2-$3 $4:$5.$6"))
Source: query [2 x 3]
Database: spark connection master=local[8] app=sparklyr local=TRUE
# A tibble: 2 x 3
time time1 time2
<chr> <chr> <chr>
1 201703170455 2017-03-17 04:55 201703170455
2 2017031704555675 2017031704555675 2017-03-17 04:55.5675