我可以在spark中强制dag依赖吗?

wj8zmpe1  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(373)

假设我有这样一个代码,其中x是rdd。

val a = x.map(...)
val b = x.map(...)
val c = x.map(...)
....
// a, b and c are used later on

出于某种原因,我希望b只在a的执行完成后执行,而c只在b的执行完成后执行。有没有办法在spark中强制实现这种依赖性?
第二,spark执行这些代码的默认机制是什么。它是否会并行执行a、b和c,因为它们之间没有依赖关系?

a14dhokn

a14dhokn1#

我所做的通常是重新构造代码,这样当我调用一个强制计算b的操作时,它必须在a之后调用。我还没见过直接操纵dag的方法。
至于你的第二个问题。a、 b和c在一个动作之前根本不会被执行。如果这些动作被并行调用(如在未来),那么它们将由spark并行运行。如果它们都按顺序调用,spark将按顺序调用它们
澄清。如果调用a.count()。那会阻碍你。因此,强制b和c的操作无法执行,因此它们不会并行运行。但是如果你打电话给这样的人:

Future(a.count())
Future(b.count())
Future(c.count())

然后Map将并行发生。每一个动作都将被调用,这将强制对各个阶段进行评估。然后spark将根据您拥有的executor核心的总数来处理这些阶段中的每个阶段的任务。

相关问题