Spark Job - объекты Scala читаются в порядке FIFO. Как сделать это параллельным? - PullRequest
1 голос
/ 28 октября 2019

У меня есть Scala - Spark Program, показанная ниже

Здесь сезон объектов Scala, продукт, поставщик ..... Группы запускаются в последовательном порядке, FIFO, есть ли способ сделать его параллельным? Отправить все вакансии одновременно?

import org.apache.spark.SparkConf
import org.apache.spark.sql.SparkSession

object Main extends App {
  var appName: String = "DataExtract"
  var master: String = "local[*]"

  val sparkConf: SparkConf = new SparkConf()
    .setAppName(appName)
    .setMaster(master)

  val spark: SparkSession = SparkSession
    .builder()
    .config(sparkConf)
    .getOrCreate()

  Season.run(spark)
  Product.run(spark)
  Vendor.run(spark)
  User.run(spark)
  ..
  ..
  .
  Group.run(spark)
}

1 Ответ

2 голосов
/ 28 октября 2019

Чтобы задания 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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...