我有下面用Java编写的spark代码的逻辑流程。我需要捕获每次迭代的时间。
// 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的懒惰评估性质,实际执行时间会有所不同。
任何指针?
答案 0 :(得分:1)
像for的条件循环将强制执行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并行性的替代方法是使用Scala(java 8可能具有类似功能)集合par功能,如下所示。
1.until( 10 ).par.foreach( i => {
println( "Start Time of " + i + new Date() )
testDF.show( i )
println( "End Time Time of " + i + new Date() )
}
)