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

如何用PySpark和Python根据月份数字获取月初与月末日期

使用PySpark实现月份转月初、月末日期

假设你需要基于固定年份(示例为2022年),从现有月份数字列生成对应的月初和月末日期,以下是具体实现步骤:

1. 导入依赖并初始化SparkSession

首先导入PySpark所需的模块和函数:

from pyspark.sql import SparkSession
from pyspark.sql.functions import col, format_string, to_date, last_day, date_format

初始化SparkSession:

spark = SparkSession.builder.appName("MonthDateConversion").getOrCreate()

2. 创建测试数据(可选)

如果没有现成的DataFrame,可以先构造测试数据:

# 测试数据:包含月份数字的列
data = [(1,), (3,), (12,), (2,)]
df = spark.createDataFrame(data, schema=["month_num"])
df.show()

输出:

+---------+
|month_num|
+---------+
|        1|
|        3|
|       12|
|        2|
+---------+

3. 添加月初日期列

通过格式化字符串拼接年份、月份和"01",再转换为日期类型,最后按需求格式化显示:

# 生成2022年的月初日期,格式转为示例中的M/d/yyyy
df = df.withColumn(
    "月初日期",
    date_format(
        to_date(format_string("2022-%02d-01", col("month_num")), "yyyy-MM-dd"),
        "M/d/yyyy"
    )
)

4. 添加月末日期列

利用PySpark内置的last_day函数,直接获取月初日期对应的当月最后一天,再格式化:

# 先获取日期类型的月初,再取月末,最后格式化显示
df = df.withColumn(
    "月末日期",
    date_format(
        last_day(to_date(format_string("2022-%02d-01", col("month_num")), "yyyy-MM-dd")),
        "M/d/yyyy"
    )
)

5. 查看结果

执行df.show()后,输出如下:

+---------+----------+----------+
|month_num|月初日期  |月末日期  |
+---------+----------+----------+
|        1|1/1/2022  |1/31/2022 |
|        3|3/1/2022  |3/31/2022 |
|       12|12/1/2022 |12/31/2022|
|        2|2/1/2022  |2/28/2022 |
+---------+----------+----------+

说明

  • 如果年份不是固定值,可以新增年份列或者将年份作为参数传入,只需要修改format_string中的年份部分即可。
  • %02d用于确保月份数字是两位(比如1转为01),避免日期转换出错。
  • 若需要保留日期类型而非字符串格式,去掉外层的date_format函数即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 08:15:04