DStream updateStateByKey更新函数实现

时间:2015-07-09 12:33:27

标签: apache-spark spark-streaming

在阅读完文档,源代码和示例之后,我试图理解updateStateByKey的不同方法签名,并且在使用它时比其他方法更合适。

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

def updateStateByKey[S: ClassTag](
  updateFunc: (Iterator[(K, Seq[V], Option[S])]) => Iterator[(K, S)],
  ...
)

在什么情况下我会创建一个updateFunc来获取并返回Iterator而不是实现(Seq[V], Option[S]) => Option[S]函数?

1 个答案:

答案 0 :(得分:2)

虽然(Seq[V], Option[S]) => Option[S]会让你"看到"只有一个密钥的前一个(如果有)和当前值,您无法访问密钥本身。

使用(Iterator[(K, Seq[V], Option[S])]) => Iterator[(K, S)]您也可以根据键做出决定,例如"我看过这个键","我看过所有这些键",比较键在决策逻辑中使用值或仅保留键的子集(例如" top-k")。