当我使用Spark DataFrame执行Action时。缓存完DataFrame之后,执行操作所需的时间与第二次操作几乎相同。我的代码在下面
logger.info("start to consuming result count")
logger.info(s"consuming ${result.count} output records")
logger.info("starting go to MysqlSink")
logger.info(s"consuming ${result.count} output records")
logger.info("starting go to MysqlSink")
控制台日志在下面
18/09/08 14:15:17 INFO MySQLRiskScenarioRunner: start to consuming result count
18/09/08 14:15:49 INFO MySQLRiskScenarioRunner: consuming 5 output records
18/09/08 14:15:49 INFO MySQLRiskScenarioRunner: starting go to MysqlSink
18/09/08 14:16:22 INFO MySQLRiskScenarioRunner: consuming 5 output records
18/09/08 14:16:22 INFO MySQLRiskScenarioRunner: starting go to MysqlSink
因此,第一次是32秒,第二次是33秒。必须使用DAG重新计算数据帧,缓存无效或无效。谁能解决我的疑问?
非常感谢。
答案 0 :(得分:-1)
由于您没有在日志行之前给出代码,因此我假设未使用引用进行缓存。它应该像这样
val dataToCache = ???
val cachedData = dataToCache.cache
使用cachedData
参考,
logger.info("start to consuming result count")
logger.info(s"consuming ${cachedData.count} output records")
logger.info("starting go to MysqlSink")
logger.info(s"consuming ${cachedData.count} output records")
logger.info("starting go to MysqlSink")
希望这会有所帮助。