I calcoli sugli RDD sono distribuiti nel cluster. Non è possibile aggiornare una variabile creata al di fuori della chiusura dell'operazione RDD dall'interno dell'RDD. Si trovano fondamentalmente in due posizioni diverse:la variabile viene creata nel driver Spark e vi si accede nei worker e dovrebbe essere trattata come di sola lettura.
Spark supporta i cumulatori distribuiti che potrebbero essere utilizzati in questo caso:Spark Cummulators
Un'altra opzione (quella che preferirei) è trasformare il flusso di RDD nel formato dati desiderato e utilizzare il foreachRDD
metodo per mantenerlo nella memoria secondaria. Questo sarebbe un modo più funzionale per affrontare il problema. Sembrerebbe più o meno così:
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)