我们正在执行一些测试来评估使用 Spark SQL 在 Spark 中的转换和操作的行为。在我们的测试中,首先我们设想一个简单的数据流,其中包含 2 个转换和 1 个操作:
LOAD (result: df_1) > SELECT ALL FROM df_1 (result: df_2) > COUNT(df_2)
第一个数据流的执行时间为 10 秒。接下来,我们向数据流添加了另一个操作:
LOAD (result: df_1) > SELECT ALL FROM df_1 (result: df_2) > COUNT(df_2) > COUNT(df_2)
分析数据流的第二个版本,由于所有转换都是惰性的,并且每个操作都重新执行(根据文档),因此在执行第二个计数时,它应该需要执行之前的两个转换(LOAD 和 SELECT ALL)。因此,我们预计在执行数据流的第二个版本时,时间约为 20 秒。但是,执行时间为 11 秒。显然,第一次计数所需的转换结果被 Spark 缓存用于第二次计数。
请问各位大佬知道怎么回事吗?