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
相关产品推荐
相关产品推荐

