将变量转换为sparklyr中的Timestamp

时间:2018-02-09 07:49:10

标签: r apache-spark sparklyr

我知道之前曾多次询问类似的问题,但我已经尝试了所有这些选项,但仍然没有得到理想的结果。

我的sdf为kl,格式如下:

   CONSUMER_ID   TimeStamp        TimeStamp2        
          <dbl>    <dbl>                <chr>              
 1       958    20171201000002 20171201000002        
 2       985    20171201000005 20171201000005  

我想以格式转换时间戳&#34; yyyy / MM / dd H:M:S&#34;

我尝试过多个在网上找到的选项,但这种格式无效。

例如:

library(sparklyr)             
library(dplyr)

ms_rech_10 = kl %>% mutate(time_2 = date(timestamp(unix_timestamp(TimeStamp2))))

ms_rech_12 = kl %>% mutate(time_2 = date(TimeStamp2))

ms_rech_12 = kl %>% mutate(time_2 = to_date(TimeStamp2))

但是在每个代码中我得到了以下输出:

  CONSUMER_ID      TimeStamp     TimeStamp2     time_2    
          <dbl>          <dbl>       <chr>       <date>    
 1        958     20171201000002 20171201000002   NA        
 2        985     20171201000005 20171201000005   NA 

请以下列格式提供解决方案。

    CONSUMER_ID      TimeStamp     TimeStamp2     time_2    
          <dbl>          <dbl>       <chr>       <dttm>    
 1        958     20171201000002 20171201000002   2017/12/01 00:00:02        
 2        985     20171201000005 20171201000005   2017/12/01 00:00:05 

谢谢!

1 个答案:

答案 0 :(得分:1)

如果您需要格式化字符串(您不能格式化时间戳):

df <- copy_to(sc, tibble(Timestamp2=c("20171201000002", "20171201000005")))

df %>%  
  mutate(time2 = from_unixtime(
    unix_timestamp(Timestamp2, "yyyyMMddHHmmss"), "yyyy/MM/dd HH:mm:ss"))

# Source:   lazy query [?? x 2]
# Database: spark_connection
  Timestamp2     time2              
  <chr>          <chr>              
1 20171201000002 2017/12/01 00:00:02
2 20171201000005 2017/12/01 00:00:05

否则只需使用to_timestamp(Timestamp2, "yyyyMMddHHmmss")