Получить время, необходимое для искры, чтобы закончить работу - PullRequest
0 голосов
/ 18 декабря 2018

Мне нужно рассчитать время на некоторые вещи в спарке, например, сколько времени нужно, чтобы спарк прочитал мой файл, поэтому мне нравится использовать sc.setLogLevel("INFO"), чтобы включить вывод дополнительной информации на экран, и одна вещь, которую я считаю действительно полезной, это когдасообщение наподобие этого напечатано 2018-12-18 02:05:38 INFO DAGScheduler:54 - Job 2 finished: count at <console>:26, took 9.555080 s, потому что это говорит мне, сколько времени заняло что-то.

Есть ли способ получить это программно (желательно в scala)?Прямо сейчас я просто копирую этот результат и сохраняю его в текстовом файле.

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

Для записи в журнал вашей программы spark доступно 2 решения.

a) Вы можете перенаправить вывод консоли на нужный файл, используя команду spark-submit.

spark-submit your_code_file > logfile.txt 2>&1

b) Для драйвера и исполнителя можно создать 2 файла журнала (log4j.properties), и при выполнении команды spark-submit включите их, указав их путь в параметрах java для драйвера и исполнителя.

spark-submit --class MAIN_CLASS --driver-java-options "-Dlog4j.configuration=file:LOG4J_PATH" --conf "spark.executor.extraJavaOptions=-Dlog4j.configuration=file:LOG4J_PATH" --master MASTER_IP:PORT JAR_PATH
0 голосов
/ 18 декабря 2018

Вы можете создать что-то вроде:

import scala.concurrent.duration._

case class TimedResult[R](result: R, durationInNanoSeconds: FiniteDuration)

  def time[R](block: => R): TimedResult[R] = {
    val t0 = System.nanoTime()
    val result = block
    val t1 = System.nanoTime()
    val duration = t1 - t0
    TimedResult(result, duration nanoseconds)
  }

и затем использовать его для вызова блока кода:

val timedResult = time{
 someDataframe.count()
}

println("Count of records ${timedResult.result}")

println("Time taken : ${timedResult.durationInNanoSeconds.toSeconds}")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...