De berekeningen op RDD's zijn verdeeld over het cluster. U kunt een variabele die buiten de afsluiting van de RDD-bewerking is gemaakt, niet bijwerken vanuit de RDD. Ze bevinden zich in principe op twee verschillende plaatsen:de variabele wordt gemaakt in het Spark-stuurprogramma en is toegankelijk in de werkers en moet worden behandeld als alleen-lezen.
Spark ondersteunt gedistribueerde cummulators die in dit geval kunnen worden gebruikt:Spark Cummulators
Een andere optie (die ik liever heb) is om de stroom van RDD om te zetten in het gewenste gegevensformaat en het gebruik van de foreachRDD
methode om het in secundaire opslag te bewaren. Dit zou een meer functionele manier zijn om het probleem te benaderen. Het zou er ongeveer zo uitzien:
val filteredStream = twitterStream.filter(entry => filters.exists(term => entry.getText.getStatus.contains(term)))
val filteredStreamWithTs = filteredStream.map(x => ((DateTime.now.toString(), x)))
filteredStreamWithTs.foreachRdd(rdd => // write to Mongo)