Apache spark 火花,为什么我';我在代码中使用count获得了更好的性能

Apache spark 火花,为什么我';我在代码中使用count获得了更好的性能,apache-spark,caching,pyspark,Apache Spark,Caching,Pyspark,我是Spark的新手,所以我在这里问这个问题,因为我找不到我的代码表现为这样的原因。。。一般来说,我有一个Jupyter笔记本,里面有很多单元格,我测试代码的不同部分——Spark 2.4.3,我缓存每个单元格的结果,然后我使用count()来获得结果的真实执行时间,然后在下一步的处理中使用这些结果(单元格)。。经过一段时间或运行测试后,我决定将逻辑作为一段代码使用 令我惊讶的是,当从单元格中整体运行代码时,它比从所有单独的单元格中创建的代码还要快,再加上count()已删除 我在单元格中的代码

我是Spark的新手,所以我在这里问这个问题,因为我找不到我的代码表现为这样的原因。。。一般来说,我有一个Jupyter笔记本,里面有很多单元格,我测试代码的不同部分——Spark 2.4.3,我缓存每个单元格的结果,然后我使用count()来获得结果的真实执行时间,然后在下一步的处理中使用这些结果(单元格)。。经过一段时间或运行测试后,我决定将逻辑作为一段代码使用

令我惊讶的是,当从单元格中整体运行代码时,它比从所有单独的单元格中创建的代码还要快,再加上count()已删除

我在单元格中的代码看起来是这样的:

单元1:

source\u dataframe\u 0=load\u source\u data\u 0()
source_dataframe_0.cache()
打印(源\数据帧\ 0.count())
单元2:

source\u dataframe\u 1=load\u source\u data\u 1()
source_dataframe_1.cache()
打印(源\数据帧\ 1.count())
单元3:

transformed_dataframe_0=source_dataframe_0。选择(…)
已转换的数据帧0.cache()
打印(已转换的\u数据帧\u 0.count())
第4单元:

transformed_dataframe_1=source_dataframe_1。选择(…)
已转换的\u数据帧\u 1.cache()
打印(已转换的数据帧计数()
第5单元:

joined\u dataframe=transformed\u dataframe\u 0.连接(transformed\u dataframe\u 1,…)。选择(…)
已加入\u dataframe.cache()
打印(已连接的数据帧.count())
第6单元:

joined\u数据帧。重新分区(…)。写入(…)
以上述示例单元格为例,组合代码如下所示:

source\u dataframe\u 0=load\u source\u data\u 0()
source_dataframe_0.cache()
源\数据帧\ 1=加载\源\数据\ 1()
source_dataframe_1.cache()
转换的数据帧0=源数据帧0。选择(…)
已转换的数据帧0.cache()
转换的数据帧1=源数据帧1。选择(…)
已转换的\u数据帧\u 1.cache()
join_dataframe=transformed_dataframe_0。join(transformed_dataframe_1,…)。选择(…)
已加入\u dataframe.cache()
已加入数据帧。重新分区(…)。写入(…)
对于两个版本的代码,我多次使用相同部分的输入数据运行测试,对于单独的单元格,我总是获得更好的性能(两个版本的代码的结果相同)。知道我做错了什么吗?我看到缓存正在为组合代码工作,因为一些任务被跳过

*这是示例代码,我缓存了重复使用的DFs