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

PySpark新手求助:生成指定数量的年月序列DataFrame

生成指定行数的年月列表PySpark DataFrame

嘿,刚接触PySpark的话,这个需求其实很好搞定,我给你写个完整的可运行示例,顺便拆解每一步的逻辑,新手也能看懂:

1. 先搭好基础:导入库和初始化SparkSession

首先得把需要的PySpark模块导入,要是还没启动SparkSession,也得先初始化好:

from pyspark.sql import SparkSession
from pyspark.sql.functions import date_format, add_months, current_date

# 初始化SparkSession(如果你的环境还没启动的话)
spark = SparkSession.builder.appName("CalendarListGenerator").getOrCreate()

2. 核心逻辑:生成连续的年月序列

我们要基于当前日期,倒推x个月(比如你要的x=5),然后把每个日期转换成「月份全称 年份」的格式:

x = 5  # 这里指定你要生成的行数

# 生成从当前月往前数x个连续月份的日期序列
# 比如当前是2019年12月,x=5的话,就会得到2019-08到2019-12的日期
calendar_dates = [add_months(current_date(), -i) for i in range(x)]

# 把日期格式化成要求的字符串,再创建DataFrame
calendar_df = spark.createDataFrame(
    [(date_format(date, "MMMM yyyy"),) for date in calendar_dates],
    schema=["Calendar_Entry"]
)

3. 查看和调整结果

运行完上面的代码,用show()就能看到生成的DataFrame了:

calendar_df.show(truncate=False)

输出结果会是这样(假设当前日期是2019年12月):

+---------------+
|Calendar_Entry |
+---------------+
|December 2019  |
|November 2019  |
|October 2019   |
|September 2019 |
|August 2019    |
+---------------+

要是你想按从早到晚的顺序排列,加个排序就行:

calendar_df.orderBy("Calendar_Entry").show(truncate=False)

小补充

  • add_months(current_date(), -i):这个函数用来计算当前日期减去i个月后的日期,循环x次就得到了x个连续月份。
  • date_format(date, "MMMM yyyy"):MMMM会返回完整的月份名称(比如August),yyyy是4位年份,刚好匹配你要的格式。
  • 大部分Spark版本都支持这些函数,要是你的版本特别旧,可能需要微调,但核心逻辑是一样的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:42:39