2015-07-09 3 views
2

После прочтения документации, источника и примеров, я пытаюсь понять различные сигнатуры методов updateStateByKey, и при их использовании будет более уместным, чем другое.Реализация функции обновления DStream updateStateByKey

В частности, я не понимаю, следующий API:

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

В каких ситуациях я бы создать updateFunc, который принимает и возвращает Iterator, а не реализации (Seq[V], Option[S]) => Option[S] функции?

ответ

2

Пока (Seq[V], Option[S]) => Option[S] позволит вам «видеть» только предыдущие (если есть) и текущие значения для ключа, вы не получаете доступ к самому ключу.

Используя (Iterator[(K, Seq[V], Option[S])]) => Iterator[(K, S)], вы также можете принимать решения на основе ключа, например, «видел ли я этот ключ», «видел ли я все эти ключи», сравнивать ключи со значениями в логике принятия решений или сохранять только подмножество (например, «top-k»).

Смежные вопросы