У меня есть фрейм данных Spark, в котором несколько столбцов, 2 из которых называются loaded_ts и ts. record_ts - это строковое представление значения даты и времени (в формате 20180101101125), а ts - это истинная отметка времени.
Когда я распечатываю содержимое фрейма данных, есть однозначное соответствие между значениями в loaded_ts и ts.
Затем я вычисляю среднее значение столбца, используя следующие
meanDF = pv \
.groupBy("p_id", "u_id", "r_id", "b_id", window("ts", "15 minutes", "1 minute")) \
.agg(mean("value")) \
.withColumnRenamed("avg(value)", "mean_15")
meanDF.createOrReplaceTempView("my_stats")
upsertDF = spark.sql("select p_id, u_id, r_id, b_id, \
date_format(window['start'], 'yyyyMMddHHmmss') as recorded_dtm, mean_15 \
from my_stats ")
aggRows = upsertDF.collect()
for aggRow in aggRows:
logger.info(aggRow)
К сожалению, значения для loaded_dtm уменьшаются в секундах и печатаются как 20180101101100 вместо 20180101101125.
Я попытался заменить 15 минут на 900 секунд и 1 минуту на 60 секунд, но это не имеет никакого значения.
Как мне сохранить секунды из столбца отметки времени?
Это мое непонимание оконной функции. window ['start'] представляет время начала окна. Имеется соответствующее окно ['end'], которое представляет время окончания окна, по которому вычисляется агрегат.