使用数字变量输入作为天数使 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
我想使用日期和参考日期来使用 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