Spark作业-Scala对象以FIFO顺序读取,如何使其并行?

Spark作业-Scala对象以FIFO顺序读取,如何使其并行?,scala,apache-spark,Scala,Apache Spark,我有一个Scala-Spark程序,如下所示 这里的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[*]"

我有一个Scala-Spark程序,如下所示

这里的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)
}
要使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 job scheduler设置为“公平”:


伟大的我在帮助文档中找不到此选项,谢谢Atlasik@Sandeep540有关更多详细信息,请检查此项。我认为您还应该将
spark.scheduler.mode
设置为
“FAIR”
,否则您的作业(虽然同时提交),可能会按顺序执行(在资源限制下),因为默认值为
“FIFO”
。看。@mazaneicha谢谢你的评论,我忘了调度程序了。我编辑了我的anwser。
sparkConf.set("spark.scheduler.mode", "FAIR")