脚本中Spark数据帧过滤器的位置是否与谓词下推相关?

时间:2018-04-16 21:53:55

标签: python apache-spark dataframe

我理解Spark在转换步骤之前不对数据帧执行任何操作,但是想知道所有转换步骤的物理位置是否重要。

我想知道如何阅读一个相当大的文件,我只需要很少。假设我有一个1 TB的文件,但我可能只需要读取不到1 GB的文件。如果我在代码中有一行来用脚本顶部附近的基本类似df.filter(df['updatedtime'] > '2018-01-01')来过滤数据帧,这可能会减少读取的数据量和强制谓词下推,是否正确?

过滤数据的代码行直到很久以后的情况怎么样?这仍然会强制执行谓词下推并减少数据读取吗?或者,这是一个我需要自我测试的反复试验场景吗?

1 个答案:

答案 0 :(得分:2)

在理想的情况下,这不重要。这是优于RDD API的主要优势。优化器应该能够重新安排执行计划以实现最佳性能。

在实践中,某些操作(因版本而异)可能会引入分析障碍或禁用下推和/或partition pruning

因此,如果您有疑问,则应始终检查执行计划,以确认是否应用了预期的优化。