Programmation itérative sur un flux spark ordonné à l'aide de Java dans Spark Streaming?


Existe-t-il de toute façon dans spark streaming pour conserver les données sur plusieurs micro-lots d'un dstream trié, où le flux est trié à l'aide d'horodatages? (En supposant des données arrivant de manière monotone) Quelqu'un peut-il faire des suggestions sur la façon de conserver les données entre les itérations où chaque itération est un RDD en cours de traitement dans JavaDStream?

Que signifie itération?

Je trie d'abord le dstream en utilisant des horodatages, en supposant que les données sont arrivées dans un horodatage monotone (no out-of-order).

J'ai besoin d'un HashMap global X, que je voudrais être mis à jour en utilisant des valeurs avec horodatage "t1", puis par la suite "t1+1". Étant donné que l'état de X lui-même affecte les calculs, il doit s'agir d'une opération linéaire. Par conséquent, l'opération à " t1 + 1 "dépend de HashMap X, qui dépend des données à et avant"t1".

Application

C'est particulièrement le cas lorsque l'on essaie de mettre à jour un modèle ou de comparer deux ensembles de RDD, ou de conserver un historique global de certains événements, etc., qui auront un impact sur les opérations lors des itérations futures?

Je voudrais garder un peu d'historique accumulé pour faire des calculs.. pas l'ensemble de données entier, mais persistent certains événements qui peuvent être utilisés dans les futurs DSTREAM RDD?

Author: tsar2512, 2015-06-18

1 answers

UpdateStateByKey fait précisément cela: il vous permet de définir un état, ainsi qu'une fonction pour le mettre à jour en fonction de chaque RDD de votre flux. C'est la façon typique d'accumuler des calculs historiques au fil du temps.

Du doc:

L'opération updateStateByKey vous permet de maintenir un état arbitraire tout en le mettant à jour continuellement avec de nouvelles informations. Pour l'utiliser, vous devrez faire deux étapes.

  1. Définir l'état - L'état peut être arbitraire type de données.
  2. Définir la fonction de mise à jour de l'état - Spécifiez avec une fonction comment mettre à jour l'état en utilisant l'état précédent et les nouvelles valeurs du flux d'entrée.

Plus d'infos ici: https://spark.apache.org/docs/1.4.0/streaming-programming-guide.html#updatestatebykey-operation

Si cela ne le coupe pas ou si vous avez besoin de plus de flexibilité, vous pouvez toujours stocker dans un magasin clé-valeur explicitement comme Cassandra (cf Cassandra connector: https://github.com/datastax/spark-cassandra-connector), bien que cette option soit généralement plus lente car elle implique systématiquement un transfert réseau à chaque recherche..

 1
Author: Svend, 2015-06-18 07:41:03