如何在提交spark之前触发催化剂优化器以减少执行时间



我所在的组织正在从传统的执行方式转向公共云。我们必须为所有在云端执行的死刑买单。为了降低执行成本,我们做了两件事:

  1. 我们正在努力避免所有错误的执行
  2. 我们正在努力进一步减少执行时间

作为一名大数据工程师,我的工作主要依赖于SparkSQL,我正在努力减少SQL查询的执行时间。催化剂在执行时做什么,我想在执行之前做。用于阅读逻辑计划、优化逻辑计划和生成物理计划等。我还想在catalyst中添加我的自定义优化计划,该计划也将在构建时触发。

在执行之前,有什么办法做到这一切吗?

您实际上可以通过创建数据帧而不执行任何操作来获得查询的执行计划。

假设您有一个DataFramedf,您可以访问df.logicalPlan并遍历计划。如果你有一些启发式方法来检测它,这可能会满足你避免错误执行的第一个要求

至于自定义优化,您可以添加自己的优化规则(请参阅https://www.waitingforcode.com/apache-spark-sql/introduction-custom-optimization-apache-spark-sql/read)。这不会在构建时触发,而是在执行时触发(就像所有催化剂优化一样(

最新更新