当数据流中没有数据时,不会触发Spark滑动窗口

时间:2019-01-28 07:59:51

标签: scala apache-spark

我有一个简单的Spark sql,时间窗口为5分钟,每分钟触发一次策略:

val withTime = eventStreams(0).selectExpr("*", "cast(cast(parsed.time as long)/1000 as timestamp) as event_time")

val momentumDataAggQuery = withTime
  .selectExpr("parsed.symbol", "parsed.bid", "parsed.ask", "event_time")
  .withWatermark("event_time", "1 minutes")
  .groupBy(col("symbol"), window(col("event_time"), "5 minutes", "60 seconds")) // change to 60 minutes
  .agg(first("bid", true).as("first_bid"), first("ask").as("first_ask"), last("bid").as("last_bid"), last("ask").as("last_ask"))

val momentumDataQuery = momentumDataAggQuery
  .selectExpr("window.start", "window.end", "ln(((last_bid + last_ask)/2)/((first_bid +  first_ask)/2)) as momentum", "symbol")

当流中有数据时,它每分钟触发一次以计算“动量”,但在没有数据点时停止。我希望即使没有足够的数据点,它也会继续使用每分钟更新的旧数据。

请考虑下表中的示例

在第一个窗口中,只有一个数据点,因此日志返回为零。

在第二个窗口中,只有两个数据点,因此它取log(97.5625 / 97.4625),其中在时间窗口12:19内,在11:53接收97.5625,在11:52:10接收97.4625 <> 12:54 ...它继续计算有足够数据点时的日志返回。

但是,当15:56:12之后没有更多数据点时,例如,对于窗口12:54 <> 12:59,我希望它将花费ln(97.8625 / 97.6625)来生成输入11:56:12和11:54:11但是事实并非如此,红色框从未生成。

我的Spark sql出问题了吗?

enter image description here

0 个答案:

没有答案