Apache spark DStream updateStateByKey更新函数的实现

Apache spark DStream updateStateByKey更新函数的实现,apache-spark,spark-streaming,Apache Spark,Spark Streaming,在阅读了文档、源代码和示例之后,我试图理解updateStateByKey的不同方法签名,以及何时使用其中一种方法比另一种更合适 具体来说,我不了解以下API: def updateStateByKey[S: ClassTag]( updateFunc: (Iterator[(K, Seq[V], Option[S])]) => Iterator[(K, S)], ... ) 在什么情况下,我会创建一个接受并返回一个迭代器的updateFunc,而不是实现(Seq[V],Opti

在阅读了文档、源代码和示例之后,我试图理解updateStateByKey的不同方法签名,以及何时使用其中一种方法比另一种更合适

具体来说,我不了解以下API:

def updateStateByKey[S: ClassTag](
  updateFunc: (Iterator[(K, Seq[V], Option[S])]) => Iterator[(K, S)],
  ...
)
在什么情况下,我会创建一个接受并返回一个迭代器的
updateFunc
,而不是实现
(Seq[V],Option[S])=>Option[S]
函数?

(Seq[V],Option[S])=>Option[S]
只允许您“看到”一个键的先前值(如果有的话)和当前值,您无法访问密钥本身

使用
(迭代器[(K,Seq[V],Option[S])])=>迭代器[(K,S)]
您也可以根据键做出决策,比如“我看到这个键了吗”、“我看到所有这些键了吗”、将键与决策逻辑中的值进行比较或者只保留一个子键集(例如“top-K”)