スパークプログラムの実行速度を遅くしたいが、怠惰のためにかなり難しい。さんがここで考慮に入れ、この(無意味な)コードを見てみましょう:スパークプログラムの実行速度を測定する方法
var graph = GraphLoader.edgeListFile(context, args(0))
val graph_degs = graph.outerJoinVertices(graph.degrees).triplets.cache
/* I'd need to start the timer here */
val t1 = System.currentTimeMillis
val edges = graph_degs.flatMap(trip => { /* do something*/ })
.union(graph_degs)
val count = edges.count
val t2 = System.currentTimeMillis
/* I'd need to stop the timer here */
println("It took " + t2-t1 + " to count " + count)
事があり、何もval count = edges.count
行の前に評価されなかっますので、変換が遅延しています。しかし、私の見解によると、t1
は上記のコードが値を持たないにもかかわらず値を取得します... t1
のコードは、コードの位置にかかわらずタイマーが開始した後に評価されます。それは問題です...
Spark Web UIでは、その特定のコード行の後に費やされる時間が必要なので、興味深いものは見つかりません。あなたは、変換のグループが本当に評価されるのを見るための簡単な解決策があると思いますか?
可能な重複メソッドはScala?](http://stackoverflow.com/questions/9160001/how-to-profile-methods-in-scala) –
この記事は重複していないようですが、Apache Sparkに固有のものです。測定ツールを提供し、具体的なプロファイリングの課題を提示します。ここで説明するように、評価は怠惰であり、therefo再評価されたコードブロックは、測定された操作を表していない可能性があります。 –