Spark应用程序中的最佳阶段数是多少



对于Spark作业中的阶段数量,是否有一些经验法则或最佳实践?你什么时候考虑把工作分解成更小的部分?

我发现较小的工作更容易分析和优化,但另一方面,在每个工作之间加载/提取数据是有成本的。

Spark应用程序的最佳阶段数没有硬性规定。

  • 这取决于您的功能决定了阶段的数量。

  • 某些方面由于Spark体系结构而产生阶段,这是有道理的。

  • 但是Catalyst&钨优化和融合代码,但不能排除"无序边界";这意味着一个新的阶段。这也不是他们的任务。DAG调度器(数据帧的水下(可以做到这一点。

  • 你可以缓存一些东西来减少Spark应用程序中后续操作的重新计算,但这也有一定的成本。

  • 你可以使用减少";"混洗";,例如,用于遗留RDD的reduceByKey。

  • 对于数据帧,DataSets Spark将生成更优化的执行计划(通常(和一些额外的阶段(用于在使用pivot时计算枢轴值(

  • 在编写、加载方面,您可以部分回答自己的问题,但bucketBy可以帮助使用这种方法。然而,我不知道为什么更大的Spark应用程序的复杂性更高——除非你的意思是使用JOIN更少的中间表,UNION更小。但阶段的数量只是一个结果,而不是阶段的决定因素。

最新更新