火花流量减少窗口

时间:2017-03-17 17:04:01

标签: apache-spark spark-streaming

嗨我有一个小问题,我不太了解..

我有一个流形式的eventhub,作为我维护状态的流的一部分,作为该状态的一部分,我发出一个包含状态更新的Map对象。我现在想要在窗口中将一组发射的地图组合在一起。所以我只为发出的一组更新发出一条消息,但mapWithState函数。

所以包括.reduceByWindow(reduce,Seconds(15),Seconds(15))假设我可以在15秒窗口内将所有发射值减少到单个地图。并且我可以使用reduce函数,如下所示;

val reduce = (reduced: Map[String, StockStateObject], in: Map[String, StockStateObject]) => {
  val result = mutable.Map[String, StockStateObject]()
  reduced.foreach(kv => result(kv._1) = kv._2)

  in.keys.foreach(key => {
    if (result.contains(key)) {
      //set the value to whichever record has the latest modified date
      if (in(key).lastUpdateDate > result(key).lastUpdateDate)
        result(key) = in(key)
    }
    else
      result(key) = in(key)
  })

  /*if(reduced.getState.size> 0 || pair.getState.size > 0 )
    println("here")
  (reduced + pair).asInstanceOf[StockState]*/

  result.toMap
}

将(希望)将一组映射合并到一个对象中,并确保如果稍后发出该值,则缩减对象中的任何重复键都将更新。如果有人可以验证我的方法并且可能更正reduce函数,那么在本质上我可以减少15秒窗口中的任何内容并确保一旦出现一个新窗口即可从空白状态开始...我确定这是正确的方法但我错过了一些微妙的事情......

0 个答案:

没有答案