我有时间戳记流数据,并且想在10分钟的时间间隔上计算一些统计信息:
out_df = stream\
.groupby(F.window(st.timestamp, "600 seconds"))\
.agg(F.sum(), F.agv())\
...
但是我发现,如果在特定时间间隔内流中没有数据,则不会创建该时间间隔的记录。
是否可以用没有数据的时间间隔来填充缺失的行?
虽然我的特定问题是关于结构化流的,但以下是在静态数据帧上进行重现的简单方法:
>>> df = spark.createDataFrame([("2016-03-11 09:00:07", 1),("2016-03-11 09:00:08", 1),("2016-03-11 09:02:07", 1)]).toDF("date", "val")
>>>
>>> w = df.groupBy(F.window("date", "60 seconds")).agg(F.sum("val").alias("sum"))
>>> from pyspark.sql import functions as F
>>> w.select(w.window.start.cast("string").alias("start"),w.window.end.cast("string").alias("end"), "sum").collect()
[Row(start='2016-03-11 09:02:00', end='2016-03-11 09:03:00', sum=1), Row(start='2016-03-11 09:00:00', end='2016-03-11 09:01:00', sum=2)]
如您所见,缺少时间间隔为09:01:00-09:02:00的行,我想使用它,可能具有NaN值或0s。
这是Spark 2.3.1(HDP 3.0)。