Изчисленията на RDD са разпределени в клъстера. Не можете да актуализирате променлива, която е създадена извън затварянето на RDD операция от RDD. Те са основно на две различни места:Променливата се създава в драйвера на Spark и се осъществява достъп в работните файлове и трябва да се третира като само за четене.
Spark поддържа разпределени кумулатори, които могат да се използват в този случай:Spark кумулатори
Друга опция (тази, която бих предпочел) е да трансформирате потока от RDD в желания формат на данни и да използвате foreachRDD
метод за запазване във вторично хранилище. Това би бил по-функционален начин за подход към проблема. Това ще изглежда приблизително така:
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)