使用 SparkR 将双精度转换为日期
Convert double to date using SparkR
当日期是字符串时,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 解决方案来将双精度转换为日期。
如果应将值解释为自纪元开始以来的天数,则应使用 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
当日期是字符串时,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 解决方案来将双精度转换为日期。
如果应将值解释为自纪元开始以来的天数,则应使用 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