登录Spark |懒惰评估对测井的影响

时间:2018-02-20 04:30:37

标签: apache-spark apache-spark-sql

我有下面用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的懒惰评估性质,实际执行时间会有所不同。

任何指针?

1 个答案:

答案 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() )
    }
    )