Spark结构化流分组窗口-填充缺少的间隔

时间:2019-04-09 19:45:42

标签: apache-spark pyspark spark-structured-streaming

我有时间戳记流数据,并且想在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)。

0 个答案:

没有答案