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|
+-------------------+-------------------+---------+
我有兴趣将时间戳四舍五入为整小时。到目前为止我得到的是四舍五入到最近的小时。例如:
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|
+-------------------+-------------------+---------+