Apache spark Spark数据帧缓存似乎对后续操作没有任何影响

Apache spark Spark数据帧缓存似乎对后续操作没有任何影响,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,当我使用Spark 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} o

当我使用Spark 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重新计算数据帧,缓存无效或未激活。有人能解决我的疑问吗


非常感谢。

因为您没有在日志行之前给出代码,所以我假设您没有使用缓存引用。应该是这样的

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")

希望这有帮助。

共享您的代码pls.val result=registeredScenarios.map(scenario=>scenario.evaluateFunc()(mysqlSourceData)).reduce((a,b)=>a.coalesce(10).union(b.coalesce(10)).persist(仅限StorageLevel.MEMORY_)实际上这不是真的,缓存没有绑定到变量。您只需执行
df.cache
,而无需将返回的数据帧重新分配给新的variable@RaphaelRoth我同意。我们不需要缓存数据帧的引用