在阅读完文档,源代码和示例之后,我试图理解updateStateByKey的不同方法签名,并且在使用它时比其他方法更合适。
具体来说,我不了解以下API:
def updateStateByKey[S: ClassTag](
updateFunc: (Iterator[(K, Seq[V], Option[S])]) => Iterator[(K, S)],
...
)
在什么情况下我会创建一个updateFunc
来获取并返回Iterator
而不是实现(Seq[V], Option[S]) => Option[S]
函数?
答案 0 :(得分:2)
虽然(Seq[V], Option[S]) => Option[S]
会让你"看到"只有一个密钥的前一个(如果有)和当前值,您无法访问密钥本身。
使用(Iterator[(K, Seq[V], Option[S])]) => Iterator[(K, S)]
您也可以根据键做出决定,例如"我看过这个键","我看过所有这些键",比较键在决策逻辑中使用值或仅保留键的子集(例如" top-k")。