【问题标题】:Convert double to date using SparkR使用 SparkR 将双精度转换为日期
【发布时间】:2019-03-18 04:12:11
【问题描述】:

当日期是字符串时,SparkR 函数 to_date 会正确地将其转换为日期格式,但当它是双精度时,则不会。

此外,R 包 zoo 也可以工作。

library(zoo)

df <- tibble::tibble(date = 17000.0)

as.Date(df$date)

# [1] "2016-07-18"

但是,SparkR 没有

df_spark <- as.DataFrame(df)
df_spark <- df_spark %>% 
  SparkR::mutate(date2 = to_date(df_spark$date, "MM/dd/yyyy"))

# org.apache.spark.sql.AnalysisException: cannot resolve 'unix_timestamp(`date`, 'MM/dd/yyyy')' due to data type mismatch: argument 1 requires (string or date or timestamp) type, however, '`date`' is of double type.

我需要 SparkR 解决方案将双精度转换为日期。

【问题讨论】:

标签: r apache-spark apache-spark-sql sparkr


【解决方案1】:

如果值应该解释为纪元开始以来的天数,则应使用date_add

df_spark %>% 
  SparkR::mutate(date2 = expr("date_add(to_date('1970-01-01'), date)")) %>% 
  head()
   date      date2                                                              
1 17000 2016-07-18

基本算术也应该有效:

df_spark %>% 
  SparkR::mutate(
    date2 = to_date(cast(column("date") * 60 * 60 * 24, "timestamp"))) %>% 
  head()
   date      date2
1 17000 2016-07-18

【讨论】:

    猜你喜欢
    • 2014-04-24
    • 1970-01-01
    • 2017-09-30
    • 2020-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-13
    • 2010-10-16
    相关资源
    最近更新 更多