Чтобы задания spark выполнялись асинхронно, вам просто нужно обернуть их в Future
:
import scala.concurrent.{Await, Future}
import scala.concurrent.ExecutionContext.Implicits._
import scala.concurrent.duration._
val jobs = Future.sequence(
List(
Future(Season.run(spark)),
Future(Product.run(spark)),
Future(Vendor.run(spark)),
Future(User.run(spark))
)
)
Await.result(jobs, 1 hour); //we need to block main thread
//to allow jobs in other threads to finish
//You can replace finite duration with Duration.Inf
Кроме того, вам нужно установить spark планировщик заданий на FAIR :
sparkConf.set("spark.scheduler.mode", "FAIR")