我有Spark数据框,其中第2列被命名为recorded_ts和ts。 recorded_ts是日期时间值的字符串表示(格式为20180101101125),ts是真实时间戳。
当我打印出数据帧内容时,在recorded_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)
不幸的是,recorded_dtm的值下降秒并打印为20180101101100而不是20180101101125
我尝试用900秒替换15分钟,用60秒替换1分钟,但这没有任何区别。
如何从时间戳列中保留秒数?
答案 0 :(得分:0)
这是我对窗口功能的误解。 window ['start']表示窗口的开始时间。有一个对应的窗口['end']表示计算聚合的窗口的结束时间。