【发布时间】:2017-11-23 08:09:13
【问题描述】:
考虑以下示例
dataframe_test<- data_frame(mydate = c('2011-03-01T00:00:04.226Z', '2011-03-01T00:00:04.226Z'))
# A tibble: 2 x 1
mydate
<chr>
1 2011-03-01T00:00:04.226Z
2 2011-03-01T00:00:04.226Z
sdf <- copy_to(sc, dataframe_test, overwrite = TRUE)
> sdf
# Source: table<dataframe_test> [?? x 1]
# Database: spark_connection
mydate
<chr>
1 2011-03-01T00:00:04.226Z
2 2011-03-01T00:00:04.226Z
我想修改字符timestamp 使其具有更常规的格式。我尝试使用regexp_replace 这样做,但失败了。
> sdf <- sdf %>% mutate(regex = regexp_replace(mydate, '(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}).(\\d{3})Z', '$1-$2-$3 $4:$5:$6.$7'))
> sdf
# Source: lazy query [?? x 2]
# Database: spark_connection
mydate regex
<chr> <chr>
1 2011-03-01T00:00:04.226Z 2011-03-01T00:00:04.226Z
2 2011-03-01T00:00:04.226Z 2011-03-01T00:00:04.226Z
有什么想法吗?正确的语法是什么?
【问题讨论】:
-
模式是正确的(您可以使用文字
.代替通配符),您只是使用了错误的函数。 -
请稍等。我应该使用哪个功能?您的链接实际上指定了我使用的相同功能
-
仔细看看 - 这是
regexp_replace,而不是regexp_extract:) -
我相信这仍然是重复的 - 我只是错了模式。请注意,它必须匹配整个字符串并且您没有转义所有内容:
sdf %>% mutate(regex = regexp_replace(mydate, '^(\\\\d{4})-(\\\\d{2})-(\\\\d{2})T(\\\\d{2}):(\\\\d{2}):(\\\\d{2}).(\\\\d{3})Z$', '$1-$2-$3 $4:$5:$6.$7'))。您可以使用regexp_extact,但它需要枚举所有字段sdf %>% mutate(regex = regexp_extract(mydate, '^(\\\\d{4})-(\\\\d{2})-(\\\\d{2})T(\\\\d{2}):(\\\\d{2}):(\\\\d{2}).(\\\\d{3})Z$', 1)) -
恐怕你必须为 R 逃一次,为 Java 逃一次。如果您认为这应该是一个单独的答案,我可以重新打开它。
标签: r apache-spark hive sparklyr