私は(スカラ座で)このようなコードを使用してRDD上の各mapPartition操作の実行時間をログに記録しようとしていますが:ApacheのスパークmapPartition奇妙な行動(遅延評価?)
rdd.mapPartitions{partition =>
val startTime = Calendar.getInstance().getTimeInMillis
result = partition.map{element =>
[...]
}
val endTime = Calendar.getInstance().getTimeInMillis
logger.info("Partition time "+(startTime-endTime)+ "ms")
result
}
問題はそれということです私はいつも2ミリ秒のような時間を得るので、マップ操作を実行し始める前に、すぐに "パーティション時間"を記録します。
私はSpark Web UIを見て気づきましたが、ログファイルでは、タスクが開始された直後に実行時間に関する行が表示されます。
誰かが私の理由を説明できますか? mapPartitions内でコードを線形に実行するか、間違っていますか? mapPartitions
の内部
おかげ
よろしくルカ
変換は遅延評価されます。 – philantrovert
ありがとう! endTimeの前に "result.size"を入れることを解決しました。 私は、デフォルトでは、スカラ操作であるmapPartitions内のマップが怠惰ではないと考えました。 – Gaglia88
@philantrovertいいえ、これは理由ではありません、map内のマップPartitionsはスパーク変換ではありません。これは純粋なスカラ関連です –