Spark中将周起始设为周一 调整dayofweek返回值的实现问题
实现方案
原生dayofweek函数的返回规则为周日对应1、周一对应2、周六对应7,只需对返回结果做简单偏移计算,即可实现周一为起始日的计数规则:周日返回7,周一返回1,其余日期按顺序递增。
完整示例代码
from pyspark.sql import SparkSession, functions as F spark = SparkSession.builder.getOrCreate() df = spark.createDataFrame([('2021-02-07',),('2021-02-08',)], ['date']) \ .select( F.col('date').cast('date'), F.date_format('date', 'EEEE').alias('weekday'), # 核心计算逻辑 F.when(F.dayofweek('date') == 1, 7).otherwise(F.dayofweek('date') - 1).alias('weekday_number') ) df.show()
运行输出
+----------+-------+--------------+ | date|weekday|weekday_number| +----------+-------+--------------+ |2021-02-07| Sunday| 7| |2021-02-08| Monday| 1| +----------+-------+--------------+
你也可以使用取模运算实现相同效果,写法更简洁:
(F.dayofweek('date') + 5) % 7 + 1
内容的提问来源于stack exchange,提问作者ZygD
相关产品推荐
相关产品推荐

