Beregningerne på RDD'er er fordelt over klyngen. Du kan ikke opdatere en variabel, der blev oprettet uden for RDD-operationens lukning inde fra RDD'en. De er grundlæggende to forskellige steder:Variablen oprettes i Spark-driveren og tilgås i arbejderne og skal behandles som skrivebeskyttet.
Spark understøtter distribuerede kummulatorer, der kunne bruges i dette tilfælde:Spark-kummulatorer
En anden mulighed (den jeg foretrækker) er at transformere strømmen af RDD til det ønskede dataformat og bruge foreachRDD
metode til at bevare det i sekundær lagring. Dette ville være en mere funktionel måde at gribe problemet an på. Det ville nogenlunde se sådan her ud:
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)