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

Spark3无需启用LEGACY模式实现1-Mon格式星期的方法

在Spark3中替代"u-E"格式实现星期统计的方法

Spark3默认启用ISO时间解析策略,不再支持Spark2.X里的u格式符(代表星期数字,1=周一),直接用"u-E"会报错。不用开启LEGACY兼容模式的话,可以拆分步骤实现相同效果:

  • 用day_of_week函数提取星期数字(1对应周一,7对应周日,和旧版u逻辑完全一致)
  • 用date_format(..., "E")提取星期缩写(如Mon、Tue)
  • 用concat_ws将两者拼接成"数字-缩写"的格式

Scala代码实现

import org.apache.spark.sql.functions.{day_of_week, date_format, concat_ws, col}

pageviewsDF.groupBy(
  concat_ws("-", day_of_week(col("capturedAt")), date_format(col("capturedAt"), "E")).alias("Day Of Week")
).sum("req")

SQL语法实现

如果习惯用SQL查询,也可以写成:

SELECT 
  CONCAT_WS('-', DAYOFWEEK(capturedAt), DATE_FORMAT(capturedAt, 'E')) AS `Day Of Week`,
  SUM(req) AS total_req
FROM pageviewsDF
GROUP BY `Day Of Week`

这种方式完全基于Spark3的原生函数,不需要依赖兼容模式,输出结果和原来的"u-E"格式完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 00:32:06