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

PySpark中datetime列分钟转小时:59分钟时向上取整

PySpark实现分钟为59时向上取整小时

可以通过PySpark内置函数组合实现需求:判断datetime列的分钟值是否为59,若是则将小时加1并把分钟置为00,同时保留原秒数;否则保持原时间不变。

方法一:基于时间函数的稳妥实现

利用date_trunc截断到小时,结合时间间隔运算和秒数提取构造目标时间,避免字符串解析的格式风险:

from pyspark.sql import functions as F

# 假设DataFrame名为df,datetime列名为dt
df = df.withColumn(
    "rounded_datetime",
    F.when(
        F.minute(F.col("dt")) == 59,
        # 截断到小时后加1小时,再拼接原时间的秒数
        F.date_trunc("hour", F.col("dt")) + F.expr("INTERVAL 1 HOUR") + F.second(F.col("dt")) * F.expr("INTERVAL 1 SECOND")
    ).otherwise(F.col("dt"))
)

方法二:字符串拼接实现(直观易懂)

提取时间各部分字段,拼接成目标时间字符串后转成timestamp类型:

from pyspark.sql import functions as F

df = df.withColumn(
    "rounded_datetime",
    F.when(
        F.minute("dt") == 59,
        F.to_timestamp(
            F.concat_ws(" ",
                # 提取日期部分
                F.date_format("dt", "yyyy-MM-dd"),
                # 构造「小时+1:00:原秒数」的格式,小时补前导零
                F.concat(F.lpad(F.hour("dt") + 1, 2, "0"), ":00:", F.date_format("dt", "ss"))
            )
        )
    ).otherwise("dt")
)

两种方法都能将2022-06-01 13:59:58转换为2022-06-01 14:00:58,可根据场景选择使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 16:18:24