scala-如何仅在需要时启动spark会话


0

我是个新手。我有一个案例,在满足条件之前,我不需要遗嘱 executor和其他基础设施

def main(args: Array[String]) {
    try {
      val request = args(0).toString


  // Get the spark session
  val spark = getSparkSession()
  log.info("Running etl Job")
  // Pipeline builder
  val pipeline = new PipelineBuilder().build(request)
  pipeline.execute(spark)
  spark.stop()
} catch {
  case e: Exception => {
    throw new RuntimeException("Failed to successfully run", e)
  }
}

}

上面的代码创建一个spark会话并执行一个ETL管道。

def main(args: Array[String]) {
    try {
      val request = args(0).toString
        if(condition) {
          val spark = getSparkSession()
          log.info("Running etl Job")
          // Pipeline builder
          val pipeline = new PipelineBuilder().build(request)
          pipeline.execute(spark)
          spark.stop()
        } else {
          // DO nothing
        }
    } catch {
      case e: Exception => {
        throw new RuntimeException("Failed to successfully run", e)
      }
    }
  }

这是否确保在条件为false时不会启动sparksession,也不会启动 executor?如果没有,还有别的办法解决这个问题吗?

1 答案


0

您可以在scala中使用延迟计算。

lazy val spark: SparkSession = ....

root据维基百科的说法,“惰性求值是一种求值策略,它将表达式的求值延迟到需要它的值为止”。

懒惰 evaluated 的好处不多,

    惰性计算有助于解决循环依赖关系。

请参考https://dzone.com/articles/scala-lazy-evaluation了解更多。


我来回答

写文章

提问题

面试题