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

PySpark如何基于已有日期列的年月新增日固定为1的日期列

PySpark实现日期取当月第一天的方案

以下是两种可直接落地的实现方式:

  • 方法1:使用date_trunc函数(最简便,推荐)
    date_trunc函数支持直接将日期截断到指定时间单位,传入"month"参数时会自动返回当月第一天的时间戳,转为日期类型即可得到目标结果:
# 导入需要的函数
from pyspark.sql import functions as F

# 假设你的原DataFrame名为df,created_date已经为Date类型
df = df.withColumn("new_date", F.date_trunc("month", F.col("created_date")).cast("date"))

如果created_date是字符串格式,需要先转成日期类型再处理:

df = df.withColumn("created_date", F.to_date(F.col("created_date"), "yyyy-MM-dd")) \
       .withColumn("new_date", F.date_trunc("month", F.col("created_date")).cast("date"))
  • 方法2:手动拼接日期(适配自定义场景)
    如果需要更灵活的逻辑,也可以提取年月后手动拼接当月1日:
df = df.withColumn("new_date", 
                   F.to_date(F.concat_ws("-", 
                                        F.year(F.col("created_date")), 
                                        F.lpad(F.month(F.col("created_date")), 2, '0'), 
                                        F.lit("01")), 
                             "yyyy-MM-dd")
                  )

你可以用以下完整测试代码验证效果:

from pyspark.sql import SparkSession
from pyspark.sql import functions as F
from pyspark.sql.types import StructType, StructField, IntegerType, StringType, DateType

# 初始化Spark会话
spark = SparkSession.builder.appName("test_month_first").getOrCreate()

# 构造测试数据
schema = StructType([
    StructField("id", IntegerType(), True),
    StructField("name", StringType(), True),
    StructField("created_date", DateType(), True)
])
data = [
    (1, "abs", "2020-03-14"),
    (2, "csn", "2019-05-20")
]
df = spark.createDataFrame(data, schema=schema)

# 执行新增列逻辑
df = df.withColumn("new_date", F.date_trunc("month", F.col("created_date")).cast("date"))

# 输出结果
df.show()

运行后输出结果如下,和需求完全一致:

+---+----+------------+----------+
| id|name|created_date|  new_date|
+---+----+------------+----------+
|  1| abs|  2020-03-14|2020-03-01|
|  2| csn|  2019-05-20|2019-05-01|
+---+----+------------+----------+

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 21:27:04