使用数字变量输入作为天数使 date_add 在 SparkR 中工作

Use numeric variable input as days to make date_add work in SparkR

我想使用日期和参考日期来使用 SparkR 获取正确的日期。这是一个玩具数据和代码:

library(magrittr)
library(SparkR)


df <- tibble::tribble(
        ~days,  ~date,
        17000L, "1970-01-01",
        17200L, "1970-01-01")
df_spark <- SparkR::as.DataFrame(df)

这个有效:

df_spark <- df_spark %>% 
  SparkR::mutate(date2 = date_add(to_date(df_spark$date), 17000))

但是,这不是。

df_spark <- df_spark %>% 
  SparkR::mutate(date2 = date_add(to_date(df_spark$date), df_spark$days))   

它抛出一个错误:

unable to find an inherited method for function ‘date_add’ for signature ‘"Column", "Column"’

我希望能够提供列 "days" 作为 date_add 的第二个参数而不是数字,因为 "days" 有许多不同的值。我该怎么做?如果 date_add 不可行,SparkR 中的其他解决方案是什么?

而不是直接使用 date_add 你应该使用 expr:

expressiondf_spark <- df_spark %>% 
  SparkR::mutate(date2 = expr("date_add(to_date(date), days)"))

expressiondf_spark %>% head()
   days       date      date2                                                   
1 17000 1970-01-01 2016-07-18
2 17200 1970-01-01 2017-02-03