PySpark 将时间戳四舍五入到整小时?

PySpark round off timestamps to full hours?

我有兴趣将时间戳四舍五入为整小时。到目前为止我得到的是四舍五入到最近的小时。例如:

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

但是这个 "round" 函数使用 HALF_UP 舍入。这意味着:23:56 结果为 00:00,但我宁愿 23:00。这可能吗?我没有找到如何在函数中设置舍入行为的选项字段。

我认为你把事情复杂化了。小时函数 returns 默认情况下是时间戳的小时部分。

from pyspark.sql.functions import to_timestamp
from pyspark.sql import Row

df = (sc
    .parallelize([Row(Timestamp='2016_08_21 11_59_08')])
    .toDF()
    .withColumn("parsed", to_timestamp("Timestamp", "yyyy_MM_dd hh_mm_ss")))

df2 = df.withColumn("Full Hour", hour(unix_timestamp("parsed").cast("timestamp")))

df2.show()

输出:

+-------------------+-------------------+---------+
|          Timestamp|             parsed|Full Hour|
+-------------------+-------------------+---------+
|2016_08_21 11_59_08|2016-08-21 11:59:08|       11|
+-------------------+-------------------+---------+