DataFrame缓存了多长时间?

时间:2018-03-31 15:40:42

标签: scala apache-spark apache-spark-sql

请帮助我理解另一个函数中缓存数据框的范围。

示例:

def mydf(): DataFrame = {
    val df = sparkSession.sql("select * from emp")
    df.cache() // <-- cached here
    df
}

def joinWithDept(): Unit = {
    val deptdf1 = sparkSession.sql("select * from dept")
    val deptdf2 = mydf().join(deptdf1,Seq("empid")) // <-- using the cached dataset?
    deptdf2.show()
}

def joinWithLocation() : Unit = {
    val locdf1 = sparkSession.sql("select * from from location")
    val locdf2 = mydf().join(locdf1,Seq("empid")) // <-- using the cached dataset?
    locdf2.show()
}

def run(): Unit = {
    joinWithDept()
    joinWithLocation()
}

以上所有功能都在同一类中定义。我不确定,是否会获得在mydf()函数中执行的数据帧缓存的好处?怎么办我验证它是否有利于捕捉?

1 个答案:

答案 0 :(得分:0)

joinWithDeptjoinWithLocation都将使用来自DataFrame的{​​{1}}的(缓存逻辑查询计划)。

您可以在Web UI的“存储”标签中查看缓存的DataFrame。

您还可以通过查看您应该看到mydf()使用的物理查询计划(explain或网页用户界面)来验证联接是否使用缓存的数据框。