MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

MongoDBObject non viene aggiunto all'interno di un ciclo rrd foreach casbah scala apache spark

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)