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

如何在PySpark中将时间戳向下取整至整点?

解决方案:将时间戳向下取整至整点

当然可以实现!你遇到的问题根源在于round()采用的是四舍五入规则,而你需要的是向下取整(截断)——不管分钟数是多少,都保留当前小时的起始时间。这里有两种简单直接的解决办法:

方法1:替换round为floor

floor()函数会直接舍去小数部分,只保留整数部分,正好匹配你的需求。修改后的代码如下:

df.withColumn("Full Hour", hour((floor(unix_timestamp("Timestamp")/3600)*3600).cast("timestamp")))

举个实际例子:23:56对应的unix时间戳除以3600后是23.933...,经过floor()处理后变为23,再乘以3600转回时间戳就是23:00:00,提取小时后得到23,完全符合你的预期。

方法2:使用更简洁的date_trunc函数

Spark内置的date_trunc函数可以直接将时间截断到指定精度(这里是小时),用法更直观,可读性更强:

from pyspark.sql.functions import date_trunc, hour

df.withColumn("Full Hour", hour(date_trunc("hour", "Timestamp")))

date_trunc("hour", "Timestamp")会直接把任意时间戳转换为当前小时的整点时间(比如2023-10-01 23:56:00会变成2023-10-01 23:00:00),再用hour()提取小时数即可。

两种方法都能解决问题,个人更推荐第二种,因为代码更简洁,不需要手动处理unix时间戳的转换逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:55:41