检索完成工作所需的时间

时间:2018-12-18 02:29:48

标签: apache-spark

我需要定时一些事情,例如火花读取我的文件需要多长时间,所以我喜欢使用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 :(得分:0)

您可以创建类似的内容:

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

答案 1 :(得分:0)

有两种解决方案可为您的spark程序记录日志。

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