Obliczenia na RDD są rozłożone w klastrze. Nie można zaktualizować zmiennej, która została utworzona poza zamknięciem operacji RDD z poziomu RDD. Znajdują się one zasadniczo w dwóch różnych miejscach:zmienna jest tworzona w sterowniku Spark i dostępna w procesach roboczych i powinna być traktowana jako tylko do odczytu.
Spark obsługuje rozproszone kumulatory, które mogą być użyte w tym przypadku:Spark Cummulatory
Inną opcją (ta, którą wolałbym) jest przekształcenie strumienia RDD do pożądanego formatu danych i użycie foreachRDD
metoda utrwalania go w pamięci dodatkowej. Byłby to bardziej funkcjonalny sposób podejścia do problemu. Wyglądałoby to mniej więcej tak:
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)