Výpočty na RDD jsou distribuovány v clusteru. Z RDD nelze aktualizovat proměnnou, která byla vytvořena mimo uzavření operace RDD. Jsou v zásadě na dvou různých místech:Proměnná je vytvořena v ovladači Spark a je přístupná v pracovnících a měla by být považována pouze za čtení.
Spark podporuje distribuované kumulátory, které lze v tomto případě použít:Spark Cumulators
Další možností (kterou bych preferoval) je transformace streamu RDD do požadovaného formátu dat a použití foreachRDD
způsob, jak jej uložit do sekundárního úložiště. To by byl funkčnější způsob, jak k problému přistupovat. Vypadalo by to zhruba takto:
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)