使用hive命令更改DF中的字符串,使用sparklyr更改mutate

时间:2017-06-02 15:49:09

标签: r apache-spark hive gsub sparklyr

使用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执行此操作的任何建议吗?

1 个答案:

答案 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