使用 hive 命令更改 DF 中的字符串并使用 sparklyr 进行变异

change string in DF using hive command and mutate with 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?

执行此操作的任何建议

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, "^(....)(..)(..)(..)(..)$", "-- :" )) %>%
  mutate(time2 = regexp_replace(
    time, "^(....)(..)(..)(..)(..)(....)$", "-- :."))

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