Я полагаю, что что-то подобное может помочь вам (используя Scala):
def timeIt[T](op: => T): Float = {
val start = System.currentTimeMillis
val res = op
val end = System.currentTimeMillis
(end - start) / 1000f
}
def XYZ = {
val r00 = sc.parallelize(0 to 999999)
val r01 = r00.map(x => (x,(x,x,x,x,x,x,x)))
r01.join(r01).count()
}
val time1 = timeIt(XYZ)
// or like this on next line
//val timeN = timeIt(r01.join(r01).count())
println(s"bla bla $time1 seconds.")
Вам нужно проявлять творческий подход и постепенно работать с действиями, которые вызывают фактическое выполнение. Это имеет ограничения, таким образом. Ленивая оценка и тому подобное.
С другой стороны, Spark Web UI записывает каждое действие и записывает продолжительность этапа для действия.
В целом: измерение производительности в общих средах затруднено. Динамическое распределение c в Spark в зашумленном кластере означает, что вы удерживаете приобретенные ресурсы во время Стадии, но при последовательных запусках той же или следующей Стадии вы можете получить меньше ресурсов. Но это по крайней мере показательно, и вы можете работать в менее загруженный период.