1、背景
Spark SQL 用thriftserver去接,使用的时候,经常会出现找不到hdfs上xxx文件,需要手动refresh table相关的表的情况。
今天偶然看到Spark Catalyst中的相关代码,突然眼前一亮,摸索着看下去,终于得到了真香。
2、代码中的实现步骤
位于org.apache.spark.sql.catalyst.catalog包下的SessionCatalog.scala :
这边定义的tableRelationCache就是Spark在执行SQL时,缓存的LogicalPlan,其中key为某个HiveTableRelation中读取出来的databaseName.tableName,value就是LogicalPlan。
而cacheSize配置了该缓存Map的容量,可通过参数spark.sql.filesourceTableRelationCacheSize调节,(默认缓存1000个)。
cacheTable为缓存LogicalPlan的入口: