如何在Spark上测量查询的执行时间

Yak*_*kov 9 sql time apache-spark ibm-cloud

我需要在Apache spark(Bluemix)上测量查询的执行时间.我尝试了什么:

import time

startTimeQuery = time.clock()
df = sqlContext.sql(query)
df.show()
endTimeQuery = time.clock()
runTimeQuery = endTimeQuery - startTimeQuery
Run Code Online (Sandbox Code Playgroud)

这是一个好方法吗?相对于看到桌子的时候,我得到的时间看起来太小了.

Tyr*_*321 10

要在命令行中执行此操作,您可以使用spark.time().

请参阅我的另一个回复:https://stackoverflow.com/a/50289329/3397114

spark.time()

输出将是:

spark.time()

https://db-blog.web.cern.ch/blog/luca-canali/2017-03-measuring-apache-spark-workload-metrics-performance-troubleshooting

  • 有什么我应该作为我的 jupyter 的一部分来执行 spark.time 的内容。它显示 AttributeError: 'SparkSession' 对象没有属性 'time'(我正在使用 pyspark .. 这仅在 scala 版本中可用?) (3认同)
  • @Tyrone321 事实并非如此。(仍然) (3认同)
  • 事实并非如此。(仍然) (2认同)

shr*_*ama 9

我使用System.nanoTime包裹辅助函数,像这样 -

def time[A](f: => A) = {
  val s = System.nanoTime
  val ret = f
  println("time: "+(System.nanoTime-s)/1e6+"ms")
  ret
}

time {
  df = sqlContext.sql(query)
  df.show()
}
Run Code Online (Sandbox Code Playgroud)


Sve*_*ger 5

更新: 不,使用time包不是衡量Spark作业执行时间的最佳方法。我知道的最方便,最准确的方法是使用Spark History Server。

在Bluemix上,在笔记本中转到右侧的“调色板”。选择“环境”面板,您将看到指向Spark历史记录服务器的链接,您可以在其中调查执行的Spark作业,包括计算时间。