我在Java中编写的火花代码的逻辑流以下。我需要捕获每次迭代的时间。
// Start Spark Job - create configuration and spark context
for ( i < 10)
{
log.info("Start Time of i" + new Date())
DataFrameObj.Count
sqlContext.sql("select * from employee")
SaveAsTextFile
log.info("End Time Time of i" + new Date())
}
//Exit Spark Job
此记录的行为会正确吗?我困惑的是,记录将发生,但由于Spark的懒惰评估性质,实际执行时间会有所不同。
任何指针?
有条件循环,例如将执行Spark变换和动作的顺序执行。您的情况您可以获得每个动作的预期耗时。
val testDF = sc.parallelize(List(("a", "b", "c", "d"))).toDF()
for (i <- 1.until( 10 )) {
println( "Start Time of " + i + new Date() )
testDF.show( i )
println( "End Time Time of " + i + new Date() )
}
启用Spark Parallelism的替代方法是使用Scala(Java 8具有相似的功能(集合功能如下。
1.until( 10 ).par.foreach( i => {
println( "Start Time of " + i + new Date() )
testDF.show( i )
println( "End Time Time of " + i + new Date() )
}
)