我有一个有关Pyspark行为的问题,我觉得很有趣
我读入一个文件,并将文件内容解析为6个不同的DataFrame,然后将其注册为视图并进行缓存。
然后我继续通过向其中添加几列来更新其中两个表。新列是通过带有一些联接的查询获得的,而我只是用完全相同的数据加上两个新列替换了原来的两个表。
整个过程可能需要15秒。
表加载完成后,将有一个下游过程,对所有表运行一堆查询。
有一天,我决定尝试改进查询,以便为前面提到的两个表派生新的列。新的查询似乎可以正常工作,并且表加载时间从15秒减少到10秒,但是我发现有趣的是,整个下游流程的完成速度大大提高。
为什么我的下游查询会改善?我的假设是,一旦缓存了表,它们将完全独立于创建它们的过程。但是,似乎下游查询非常依赖于表在缓存之前如何创建。就像衍生新列的查询几乎成为下游查询的执行计划的一部分一样。如果是这样,有什么办法可以防止?