Как начать сеанс зажигания только при необходимости - PullRequest
0 голосов
/ 12 марта 2020

Я новичок в искре. У меня есть случай, когда мне не нужны исполнители и другая инфраструктура, пока не будет выполнено условие. У меня есть следующий код

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)
      }
    }
  }

Приведенный выше код создает сеанс искры и выполняет конвейер 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)
      }
    }
  }

Гарантирует ли это, что зажигание не инициируется и исполнители не запускаются, если условие ложно? Если нет, есть ли другой способ решить эту проблему?

1 Ответ

0 голосов
/ 13 марта 2020

Вы можете использовать ленивый анализ в scala. В вашей функции getSparkSession () определите

lazy val spark: SparkSession = ....

Согласно википедии, «Ленивая оценка - это стратегия оценки, которая откладывает оценку выражения до тех пор, пока не потребуется его значение» .

Немного преимуществ ленивых вычислений:

  1. Ленивые вычисления могут помочь разрешить циклические зависимости.
  2. Это может обеспечить повышение производительности, если не выполнять вычисления до тех пор, пока это не потребуется, - и они могут этого не делать быть сделано вообще, если расчет не используется.
  3. Он может увеличить время отклика приложений, отложив тяжелые операции до необходимости.

Пожалуйста, обратитесь к https://dzone.com/articles/scala-lazy-evaluation, чтобы узнать больше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...