阅读完文档、源代码和示例后,我试图了解 updateStateByKey 的不同方法签名,以及何时使用其中一种方法比另一种更合适。
具体来说,我不理解以下 API:
def updateStateByKey[S: ClassTag](
updateFunc: (Iterator[(K, Seq[V], Option[S])]) => Iterator[(K, S)],
...
)
在什么情况下我会创建一个 updateFunc
来接受并返回一个 Iterator
而不是实现 (Seq[V], Option[S]) =>选项[S]
功能?
最佳答案
虽然 (Seq[V], Option[S]) => Option[S]
会让您仅“查看”某个键的前一个(如果有)和当前值,但您无法访问 key 本身。
使用 (Iterator[(K, Seq[V], Option[S])]) => Iterator[(K, S)]
你也可以根据键做出决定,例如“我见过这个键吗”,“我见过所有这些键吗”,将键与决策逻辑中的值进行比较,或者仅保留键的子集(例如“top-k”)。
关于apache-spark - DStream updateStateByKey更新函数实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31317639/