val serviceResponsesRDD: RDD[List[ServiceResponse]] = requestsRDD.mapPartitions{ requestIterator => val requests = requestIterator.toList logger.info(s"[START] Query service with ${requests.length} requests") // Provides a CloseableHttpClient with back off should the service fail val httpClient = HttpClientBuilder.withBackoff() val responsesToAwait = requests.map(request => Service.call(request, httpClient)) val sequenceResponses = Future.sequence(responsesToAwait) val responses = Await.result(sequenceResponses, 2 minutes) logger.info(s"[FINISH] Query service with ${requests.length} requests") httpClient.close() responses.iterator }