Apache spark 如何在spark提交之前触发catalyst optimizer以减少执行时间?

Apache spark 如何在spark提交之前触发catalyst optimizer以减少执行时间?,apache-spark,pyspark,apache-spark-sql,Apache Spark,Pyspark,Apache Spark Sql,我所工作的组织正在从传统的执行方式转向公共云。我们必须为所有在云上执行的死刑买单。为了降低执行成本,我们做了两件事: 我们正在努力避免所有糟糕的执行 我们正试图进一步缩短执行时间 作为一名大数据工程师,我的工作主要依赖于SparkSQL,我正在努力减少SQL查询执行时间。catalyst在执行时做什么,我想在执行之前做。用于读取逻辑计划、优化逻辑计划和生成物理计划等。 我还想在catalyst中添加自定义优化计划,这也将在构建时触发 在执行之前有没有办法完成所有这些工作?通过创建数据帧而不执行任

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

  • 我们正在努力避免所有糟糕的执行
  • 我们正试图进一步缩短执行时间
  • 作为一名大数据工程师,我的工作主要依赖于SparkSQL,我正在努力减少SQL查询执行时间。catalyst在执行时做什么,我想在执行之前做。用于读取逻辑计划、优化逻辑计划和生成物理计划等。 我还想在catalyst中添加自定义优化计划,这也将在构建时触发


    在执行之前有没有办法完成所有这些工作?

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

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

    对于自定义优化,您可以添加自己的优化规则(请参阅)。
    这不会在构建时触发,而是在执行时触发(与所有catalyst优化一样)

    顺便说一句,您也可以自己调用优化器:
    df.sparkSession().sessionState().optimizer().execute(df.logicalPlan())我知道我们可以通过调用explain()方法在spark执行之前检查计划,但是catalyst需要做很多事情,我想完成它的所有步骤。例如,catalyst在树上执行一些基于规则的转换,并生成优化的逻辑计划。将逻辑计划转换为多个物理计划,然后使用最优化的物理计划。我们是否可以在执行之前完成所有这些工作,以便catalyst在运行时做一些工作