Costruisco un RDD da un elenco di URL e quindi provo a recuperare i dati con alcune chiamate http asincrone. Ho bisogno di tutti i risultati prima di fare altri calcoli. Idealmente, ho bisogno di fare le chiamate http su nodi differenti per considerazioni di ridimensionamento.Lavoro spark con chiamata HTTP Async
ho fatto qualcosa di simile:
//init spark
val sparkContext = new SparkContext(conf)
val datas = Seq[String]("url1", "url2")
//create rdd
val rdd = sparkContext.parallelize[String](datas)
//httpCall return Future[String]
val requests = rdd.map((url: String) => httpCall(url))
//await all results (Future.sequence may be better)
val responses = requests.map(r => Await.result(r, 10.seconds))
//print responses
response.collect().foreach((s: String) => println(s))
//stop spark
sparkContext.stop()
Questo lavoro, ma Job della scintilla mai fine!
Quindi mi chiedo quali sono le migliori pratiche per affrontare Future usando Spark (o Future [RDD]).
Penso che questo caso d'uso sia piuttosto comune, ma non ho ancora trovato alcuna risposta.
migliori saluti
Il problema non dovrebbe essere lo spostamento di dati tra 'richieste' e' risposte ', quindi entrambe le trasformazioni devono essere eseguite nello stesso stadio, quindi gli stessi esecutori e contesti. – zero323