You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spark中如何将列值(天数)添加至日期列?

在Spark中使用整数列作为date_add的天数参数

没问题,这事儿其实特别简单——date_add函数本来就支持直接用整数列作为第二个参数,根本不用额外的复杂操作!你之前可能误以为只能传固定整数,但它的参数定义里明确写了接受tinyint/smallint/int类型的输入,不管是固定值还是列都可以。

下面直接给你完整的可运行代码示例,对应你提供的DataFrame:

import org.apache.spark.sql.functions.date_add
import org.apache.spark.sql.types.DateType

// 创建你给出的示例DataFrame,顺便给列起个直观的名字
val data = Seq(
  (0, "2016-01-01"),  // 原日期补全为标准格式
  (1, "2016-02-02"),
  (2, "2016-03-22"),
  (3, "2016-04-25"),
  (4, "2016-05-21"),
  (5, "2016-06-01"),
  (6, "2016-03-21")
).toDF("days_to_add", "start_date_str")

// 步骤分解:
// 1. 先把字符串类型的日期转成Spark的Date类型(date_add要求第一个参数是日期列)
// 2. 直接用days_to_add列作为date_add的第二个参数,生成新日期列
val resultDF = data
  .withColumn("start_date", $"start_date_str".cast(DateType))
  .withColumn("new_date", date_add($"start_date", $"days_to_add"))
  .select("days_to_add", "start_date", "new_date")  // 只保留需要的列查看结果

// 打印结果看看
resultDF.show()

运行后会得到这样的输出:

+-----------+----------+----------+
|days_to_add|start_date|  new_date|
+-----------+----------+----------+
|          0|2016-01-01|2016-01-01|
|          1|2016-02-02|2016-02-03|
|          2|2016-03-22|2016-03-24|
|          3|2016-04-25|2016-04-28|
|          4|2016-05-21|2016-05-25|
|          5|2016-06-01|2016-06-06|
|          6|2016-03-21|2016-03-27|
+-----------+----------+----------+

小补充

如果你的天数列类型不是int(比如是long),只需要加个类型转换就行:

.withColumn("new_date", date_add($"start_date", $"days_to_add".cast(IntegerType)))

内容的提问来源于stack exchange,提问作者Mrgr8m4

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:51:50