我需要测量Apache spark(Bluemix)上查询的执行时间。 我尝试了什么:
import time
startTimeQuery = time.clock()
df = sqlContext.sql(query)
df.show()
endTimeQuery = time.clock()
runTimeQuery = endTimeQuery - startTimeQuery
这是一个好方法吗?相对于看到桌子的时候,我得到的时间看起来太小了。
答案 0 :(得分: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()
}
答案 1 :(得分:5)
<强>更新强>
不,使用time
包不是衡量Spark作业执行时间的最佳方法。我所知道的最方便和最准确的方法是使用Spark History Server。
在Bluemix上,在你的笔记本中去了#34; Paelette&#34;在右侧。选择&#34;环境&#34;面板,您将看到Spark History Server的链接,您可以在其中调查已执行的Spark作业,包括计算时间。
答案 2 :(得分:3)
SPARK本身提供了有关Spark Job每个阶段的详细信息。
您可以在http://IP-MasterNode:4040上查看正在运行的作业,也可以启用历史记录服务器以便稍后分析作业。
有关历史记录服务器的详细信息,请参阅here。
答案 3 :(得分:0)
对于那些正在寻找/需要python版本的人
(因为pyspark google搜索导致该帖子):
from time import time
from datetime import timedelta
class T():
def __enter__(self):
self.start = time()
def __exit__(self, type, value, traceback):
self.end = time()
elapsed = self.end - self.start
print(str(timedelta(seconds=elapsed)))
用法:
with T():
//spark code goes here
受启发: https://blog.usejournal.com/how-to-create-your-own-timing-context-manager-in-python-a0e944b48cf8
在使用控制台或连笔记本时证明是有用的 (jupyter魔术%% time和%timeit限于单元格范围,当您在笔记本上下文中共享对象时,这很不方便)