我有一个复杂的软件,它执行非常复杂的 SQL 查询(不是查询,你知道的 Spark 计划)。<-- 计划是动态的,它们会根据用户输入而变化,因此我无法“缓存”它们。
我有一个阶段,其中 spark 需要 1.5-2 分钟来制定计划。为了确保,我添加了“logXXX”,然后是 explain(true),然后是“logYYY”,解释执行需要 1 分 20 秒。
我试图打破血统,但这似乎会导致性能下降,因为实际执行时间变得更长。
我不能并行化驱动程序的工作(已经做过,但是这个任务不能与其他任何事情重叠)。
关于如何改进 Spark 中的计划生成器的任何想法/指南?(例如,尝试启用/禁用的标志等等......)
有没有办法在 Spark 中缓存计划?(所以我可以并行运行它然后执行它)
我尝试禁用所有可能的优化器规则,将最小迭代次数设置为 30 ......但似乎没有任何影响具体点:S
我尝试禁用 wholeStageCodegen 并有所帮助,但执行时间更长:)。
谢谢!,
PS:该计划确实包含多个联合(<20,但每个联合内的计划非常复杂),这是造成时间的原因,但将它们分开也会影响执行时间。