Spark Scala - date_add() 的时间戳

Spark Scala - timestamp into date_add()

我在做一些必须很简单的事情时遇到了一些麻烦..但我仍处于学习的早期阶段。

问题是:我想获得一个项目的开始日期,然后再加上 20 天。我想以自动方式进行,而不是手动添加它(比如..虽然我知道它是从 2019-06-01 开始的,但我不想手动输入日期“2019-06-21”,因为我可能会更改它后来,我想我这样做只是懒惰而已。

所以,为了得到我正在做的开始日期:

val start_date = table.select(date_trunc("day", min('applied_at)).as("start_date"))

返回一个

start_date: org.apache.spark.sql.DataFrame = [start_date: timestamp]

但是,如果我尝试在函数 date_add() 上使用它,则会出现错误。

val objective = date_add(start_date, 20)
error: type mismatch;
 found   : org.apache.spark.sql.DataFrame
    (which expands to)  org.apache.spark.sql.Dataset[org.apache.spark.sql.Row]
 required: org.apache.spark.sql.Column
                           && date_trunc("day",$"applied_at").as("applied_at") < date_add(start_date, projection_proxy)
                                                                                          ^ 

所以我尝试了其他格式并尝试了一下,但我自己找不到答案。一定是因为我没有必要的基础知识。

我知道它要求我提供一个列,但我可以只将一个变量转换为一个列吗?我应该以不同的方式解决这个问题吗?

由于错误提示 date_add 函数接受 col 数据类型,但是您正试图传递整个 Dataframe。

当您在现有 dataframe 上应用 select 时,无论它有多少列或行,您都会得到一个 new dataframe

将天数添加到日期列

df = start_date.withColumn("new_date", date_add($"start_date", 20))

如果您只想拥有单列,或只有具有新日期的列

val newDateDF = minDateDF.
  withColumn("new_date", date_add($"start_date", 1))
  .drop($"start_date")
  .select($"new_date".alias("start_date"))

如果您想将其作为值

val new_date = newDateDF.select($"start_date").collect()(0)(0).toString()