add TimedIterator
This commit is contained in:
parent
843084d69d
commit
1ad77c4766
32
core/src/main/scala/spark/util/TimedIterator.scala
Normal file
32
core/src/main/scala/spark/util/TimedIterator.scala
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
package spark.util
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A utility for tracking the total time an iterator takes to iterate through its elements.
|
||||||
|
*
|
||||||
|
* In general, this should only be used if you expect it to take a considerable amount of time
|
||||||
|
* (eg. milliseconds) to get each element -- otherwise, the timing won't be very accurate,
|
||||||
|
* and you are probably just adding more overhead
|
||||||
|
*/
|
||||||
|
class TimedIterator[+A](val sub: Iterator[A]) extends Iterator[A] {
|
||||||
|
private var netMillis = 0l
|
||||||
|
private var nElems = 0
|
||||||
|
def hasNext = {
|
||||||
|
val start = System.currentTimeMillis()
|
||||||
|
val r = sub.hasNext
|
||||||
|
val end = System.currentTimeMillis()
|
||||||
|
netMillis += (end - start)
|
||||||
|
r
|
||||||
|
}
|
||||||
|
def next = {
|
||||||
|
val start = System.currentTimeMillis()
|
||||||
|
val r = sub.next
|
||||||
|
val end = System.currentTimeMillis()
|
||||||
|
netMillis += (end - start)
|
||||||
|
nElems += 1
|
||||||
|
r
|
||||||
|
}
|
||||||
|
|
||||||
|
def getNetMillis = netMillis
|
||||||
|
def getAverageTimePerItem = netMillis / nElems.toDouble
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in a new issue