请帮助我理解另一个函数中缓存数据框的范围。
示例:
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()函数中执行的数据帧缓存的好处?怎么办我验证它是否有利于捕捉?
答案 0 :(得分:0)
joinWithDept
和joinWithLocation
都将使用来自DataFrame
的{{1}}的(缓存逻辑查询计划)。
您可以在Web UI的“存储”标签中查看缓存的DataFrame。
您还可以通过查看您应该看到mydf()
使用的物理查询计划(explain
或网页用户界面)来验证联接是否使用缓存的数据框。