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()
我在做一些必须很简单的事情时遇到了一些麻烦..但我仍处于学习的早期阶段。
问题是:我想获得一个项目的开始日期,然后再加上 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()