DStream updateStateByKey 更新函数实现
DStream updateStateByKey update function implementation
阅读文档、源代码和示例后,我试图了解 updateStateByKey 的不同方法签名以及何时使用一个比另一个更合适。
具体是下面的我没看懂API:
def updateStateByKey[S: ClassTag](
updateFunc: (Iterator[(K, Seq[V], Option[S])]) => Iterator[(K, S)],
...
)
在什么情况下我会创建一个 updateFunc
并且 returns 一个 Iterator
而不是实现 (Seq[V], Option[S]) => Option[S]
函数?
虽然 (Seq[V], Option[S]) => Option[S]
只会让您 "see" 一个密钥的先前(如果有)和当前值,但您无法访问密钥本身。
使用 (Iterator[(K, Seq[V], Option[S])]) => Iterator[(K, S)]
您也可以根据键做出决策,例如 "have I seen this key"、"have I seen all these keys",将键与决策逻辑中的值进行比较或仅保留一个子集键的数量(例如 "top-k")。
阅读文档、源代码和示例后,我试图了解 updateStateByKey 的不同方法签名以及何时使用一个比另一个更合适。
具体是下面的我没看懂API:
def updateStateByKey[S: ClassTag](
updateFunc: (Iterator[(K, Seq[V], Option[S])]) => Iterator[(K, S)],
...
)
在什么情况下我会创建一个 updateFunc
并且 returns 一个 Iterator
而不是实现 (Seq[V], Option[S]) => Option[S]
函数?
虽然 (Seq[V], Option[S]) => Option[S]
只会让您 "see" 一个密钥的先前(如果有)和当前值,但您无法访问密钥本身。
使用 (Iterator[(K, Seq[V], Option[S])]) => Iterator[(K, S)]
您也可以根据键做出决策,例如 "have I seen this key"、"have I seen all these keys",将键与决策逻辑中的值进行比较或仅保留一个子集键的数量(例如 "top-k")。