PySpark округляет временные метки до полных часов? - PullRequest
0 голосов
/ 09 июня 2019

Я заинтересован в округлении временных меток до полных часов.Что я получил, так это округлился до ближайшего часа.Например, с этим:

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

Но эта "круглая" функция использует округление HALF_UP.Это означает: 23:56 приводит к 00:00, но я бы предпочел иметь 23:00.Это возможно?Я не нашел поле опции, как установить поведение округления в функции.

1 Ответ

0 голосов
/ 10 июня 2019

Я думаю, вы слишком усложняете вещи.Часовая функция по умолчанию возвращает часовой компонент временной метки.

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|
+-------------------+-------------------+---------+
...