使用sparklyr将string/chr转换为日期

3bygqnnd  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(274)

我带来了一个表到色调,其中有一列日期,我试图发挥它在rstudio使用sparkyr。
我想将字符列转换为日期列,如下所示:

Weather_data = mutate(Weather_data, date2 = as.Date(date, "%m/%d/%Y"))

运行正常,但当我检查时:

head(Weather_data)


如何正确地将chr转换为日期?
谢谢!!!!

t2a7ltrp

t2a7ltrp1#

问题是 sparklyr 不能正确支持spark DateType . 可以解析日期和正确的格式,但不能正确地表示这些 DateType 柱。如果足够的话,请按照下面的说明。
在spark 2.2或更高版本中使用 to_date 使用java SimpleDataFormat 兼容字符串:

df <- copy_to(sc, data.frame(date=c("01/01/2010")))
parsed <- df %>% mutate(date_parsed = to_date(date, "MM/dd/yyyy"))
parsed

# Source:   lazy query [?? x 2]

# Database: spark_connection

        date date_parsed
       <chr>       <chr>
1 01/15/2010  2010-01-15

有趣的是,内部Spark对象仍然使用 DateType 柱:

parsed %>% spark_dataframe
<jobj[120]>
  class org.apache.spark.sql.Dataset
  [date: string, date_parsed: date]

对于早期版本 unix_timestamp 以及 cast (但要注意可能出现的时区问题):

df %>%
  mutate(date_parsed = sql(
    "CAST(CAST(unix_timestamp(date, 'MM/dd/yyyy') AS timestamp) AS date)"))

# Source:   lazy query [?? x 2]

# Database: spark_connection

        date date_parsed
       <chr>       <chr>
1 01/15/2010  2010-01-15

编辑:
在当前主机上,此问题似乎已解决( sparklyr_0.7.0-9105 ):


# Source:   lazy query [?? x 2]

# Database: spark_connection

        date date_parsed
       <chr>      <date>
1 01/01/2010  2009-12-31

相关问题