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

如何在PySpark中从给定日期字段提取对应的星期几

PySpark 从日期字段提取星期几的实现说明

现有代码正确性验证

你写的实现代码是完全正确的:

dt = dt.withColumn("week_day_number", date_format(col("TRANSACTION_DATE"), "u"))

其中格式符u对应ISO 8601标准的星期计数规则:1代表周一,2代表周二,依次类推,7代表周日,符合大部分业务场景的星期计数要求。

其他可选实现方式

根据不同的业务需求,还有以下几种常用实现:

  • 使用原生dayofweek函数
    不需要记忆格式符,写法更直观,注意该函数默认计数规则和ISO标准不同:1代表周日,2代表周一,7代表周六,如果需要对齐ISO标准可做简单偏移处理:
    from pyspark.sql.functions import dayofweek, when
    
    # 原生规则输出
    dt = dt.withColumn("week_day_number", dayofweek(col("TRANSACTION_DATE")))
    
    # 调整为ISO标准(周一=1,周日=7)
    dt = dt.withColumn("week_day_number", 
            when(dayofweek(col("TRANSACTION_DATE")) == 1, 7)
            .otherwise(dayofweek(col("TRANSACTION_DATE")) - 1)
          )
    
  • 提取星期文本名称
    如果需要输出星期的文字名称,可调整date_format的格式符实现:
    # 输出英文全称,如 Monday、Sunday
    dt = dt.withColumn("week_day_en_full", date_format(col("TRANSACTION_DATE"), "EEEE"))
    # 输出英文缩写,如 Mon、Sun
    dt = dt.withColumn("week_day_en_short", date_format(col("TRANSACTION_DATE"), "EEE"))
    # 输出中文名称,需确保Spark会话的locale配置为zh_CN
    dt = dt.withColumn("week_day_cn", date_format(col("TRANSACTION_DATE"), "EEEE"))
    

性能说明

以上几种实现的底层都是调用Spark原生的日期处理算子,运行效率没有明显差异。如果你的业务只需要ISO标准的数字星期值,你当前的写法已经是最优方案,简洁且可读性高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 04:24:05