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

PySpark中判断日期区间内是否存在指定列表中的周日

PySpark 判断日期区间内是否包含指定周日的解决方案

前置说明

假设你的DataFrame中start_date和end_date为字符串类型,需先转换为PySpark的Date类型;预定义的周日列表也需统一为日期格式进行判断。

步骤1:初始化环境与数据处理

from pyspark.sql import SparkSession
from pyspark.sql.functions import col, expr, lit
from pyspark.sql.types import DateType

# 初始化SparkSession
spark = SparkSession.builder.appName("CheckHolidaySundays").getOrCreate()

# 预定义周日列表
holiday_Sundays_list = ['01/01/2023', '07/04/2027', '07/04/2032']

# 示例DataFrame(替换为你的实际数据)
data = [
    ("05/01/2023", "05/02/2023"),
    ("04/26/2023", "05/09/2023"),
    ("12/28/2022", "01/02/2023")
]
df = spark.createDataFrame(data, ["start_date", "end_date"])

# 将字符串日期列转为Date类型
df = df.withColumn("start_date", col("start_date").cast(DateType())) \
       .withColumn("end_date", col("end_date").cast(DateType()))

步骤2:生成判断结果列

提供两种实现方式,可根据你的日期列表长度选择:

方式一:适合短列表的直接判断

通过OR连接每个日期的区间校验条件:

# 构建判断条件字符串
condition = " OR ".join([f"(to_date('{d}', 'MM/dd/yyyy') BETWEEN start_date AND end_date)" for d in holiday_Sundays_list])

# 添加结果列
result_df = df.withColumn("Sunday_in_list", expr(f"CASE WHEN {condition} THEN 'Y' ELSE 'N' END"))

# 查看结果
result_df.show()

方式二:适合长列表的数组遍历判断

利用exists函数遍历日期数组,判断是否有日期落在目标区间:

# 将预定义日期转为字符串数组(适配PySpark的数组操作)
holiday_dates_str = [str(spark.sql(f"to_date('{d}', 'MM/dd/yyyy')").first()[0]) for d in holiday_Sundays_list]

# 使用exists函数实现区间判断
result_df = df.withColumn(
    "Sunday_in_list",
    expr(f"""
        CASE WHEN exists(array({','.join([f"'{d}'" for d in holiday_dates_str])}), 
                         date -> to_date(date) BETWEEN start_date AND end_date) 
             THEN 'Y' ELSE 'N' END
    """)
)

# 查看结果
result_df.show()

最终输出

两种方式都会得到如下结果:

+----------+----------+---------------+
|start_date|  end_date|Sunday_in_list|
+----------+----------+---------------+
|2023-05-01|2023-05-02|              N|
|2023-04-26|2023-05-09|              N|
|2022-12-28|2023-01-02|              Y|
+----------+----------+---------------+

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 06:10:28