web-dev-qa-db-fra.com

Comment connaître la durée d'exécution d'un code dans scala?

J'ai besoin de calculer le temps d'exécution d'un code dans scala. Le code est.

val data = sc.textFile("/home/david/Desktop/Datos Entrada/household/household90Parseado.txt")

val parsedData = data.map(s => Vectors.dense(s.split(' ').map(_.toDouble))).cache()

val numClusters = 5
val numIterations = 10 
val clusters = KMeans.train(parsedData, numClusters, numIterations)

J'ai besoin de connaître le temps d'exécution pour traiter ce code, le temps doit être en secondes. Merci beaucoup.

12

Basé sur la discussion ici , vous voudrez utiliser System.nanoTime pour mesurer la différence de temps écoulé:

val t1 = System.nanoTime

/* your code */

val duration = (System.nanoTime - t1) / 1e9d
28
evan.oman

Vous pouvez utiliser un scalamètre: https://scalameter.github.io/

Mettez simplement votre bloc de code entre crochets:

val executionTime = measure {
  //code goes here
}

Vous pouvez le configurer pour réchauffer le jvm afin que les mesures soient plus fiables:

val executionTime = withWarmer(new Warmer.Default) measure {
  //code goes here
}
5
fr3ak

En partant de Spark2 nous pouvons utiliser spark.time(<command>) (uniquement en scala jusqu'à présent) pour obtenir le temps mis pour exécuter action/transformation ..

Exemple:

Trouver le nombre de records in a dataframe

scala> spark.time(
                 sc.parallelize(Seq("foo","bar")).toDF().count() //create df and count
                 )
Time taken: 54 ms //total time for the execution
res76: Long = 2  //count of records
5
Shu

L'approche la plus élémentaire consisterait simplement à enregistrer l'heure de début et l'heure de fin et à effectuer une soustraction.

val startTimeMillis = System.currentTimeMillis()

/* your code goes here */

val endTimeMillis = System.currentTimeMillis()
val durationSeconds = (endTimeMillis - startTimeMillis) / 1000
3
Larsenal

ce serait la meilleure façon de calculer le temps pour scala code.

def time[R](block: => (String, R)): R = {
    val t0 = System.currentTimeMillis()
    val result = block._2
    val t1 = System.currentTimeMillis()
    println(block._1 + " took Elapsed time of " + (t1 - t0) + " Millis")
    result
 }

 result = kuduMetrics.time {
    ("name for metric", your function call or your code)
 }
1
Sandish Kumar H N