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

如何在Apache Spark/Spark SQL中生成两个日期间的日期序列

PySpark生成0001-01-01至9999-12-31全量日期的可行方案

方案1:纯Spark原生实现(推荐)

Spark 3.0+内置的日期序列函数支持直接生成指定范围的日期,全程分布式计算,不会把全量数据压在Driver端,性能远高于pandas转Spark的方式,不会出现OOM或者类型转换报错。
PySpark API写法:

from pyspark.sql import functions as F

# 定义起止日期
start = F.lit("0001-01-01").cast("date")
end = F.lit("9999-12-31").cast("date")

# 生成全量日期DataFrame
date_df = spark.range(1).select(
    F.explode(F.sequence(start, end, F.expr("interval 1 day"))).alias("full_date")
)

# 校验范围
date_df.select(
    F.min("full_date").alias("最小日期"),
    F.max("full_date").alias("最大日期"),
    F.count("*").alias("总日期数")
).show()

Spark SQL写法:

SELECT date_val AS full_date
FROM (
    SELECT sequence(to_date('0001-01-01'), to_date('9999-12-31'), interval 1 day) AS date_seq
) t
LATERAL VIEW explode(date_seq) e AS date_val

说明:Spark默认采用Proleptic Gregorian日历,原生支持0001-01-01到9999-12-31的日期范围,和pandas period_range 生成的日期范围完全对齐,不会出现日期缺失、偏移问题。全量日期共约365.2万条,生成耗时仅数秒,生成后可缓存复用。

原有pandas逻辑转换失败的原因

直接把pandas period_range 结果转Spark DataFrame失败通常是两个原因:

  • period_range 生成的是Period类型,Spark没有对应的自动类型映射,直接传入会报类型不匹配错误
  • 全量日期数据会先全部加载到Driver端的pandas内存中,如果Driver内存分配不足会直接触发OOM

如果一定要复用pandas逻辑,修正后的写法如下(不推荐,仅作兼容参考):

import pandas as pd
from pyspark.sql.types import DateType

# 先把Period类型转换为Spark可识别的datetime类型
pdf = pd.period_range(start='0001-01-01', end='9999-12-31')\
    .to_timestamp()\
    .to_frame(index=False, name=['full_date'])

date_df = spark.createDataFrame(pdf)\
    .withColumn("full_date", F.col("full_date").cast(DateType()))

版本兼容提示

注意:Spark 2.x已停止官方维护,优先建议升级到3.x版本获得更稳定的日期函数支持。如果使用Spark 2.x版本,sequence函数对日期类型的支持存在部分bug,可以通过计算两个日期的差值,用date_add逐天偏移生成:

from pyspark.sql import functions as F

start = "0001-01-01"
end = "9999-12-31"

day_diff = spark.sql(f"SELECT datediff(to_date('{end}'), to_date('{start}')) AS diff").collect()[0]["diff"]

date_df = spark.range(day_diff + 1).select(
    F.date_add(F.lit(start).cast("date"), F.col("id").cast("int")).alias("full_date")
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 20:55:00