Spark DAG执行顺序是并行还是顺序?

时间:2018-09-20 21:38:19

标签: apache-spark

我有两个来源,它们可以是不同类型的来源(数据库或文件),也可以是相同类型的。

数据集1 = source1.load;

Dataset2 = source2.load;

spark会并行将数据加载到不同的数据集中吗?还是会按顺序加载?

1 个答案:

答案 0 :(得分:1)

动作是顺序发生的。您的语句 ...将并行加载到不同的数据集中... 依次为 Actions

操作(包括转换)所需的

数据管道在可能的情况下并行发生。例如。如果可以分配足够的执行器(插槽),则创建一个包含4个要受Union负载的数据框将导致这些负载并行发生。

因此,正如评论中所指出的那样,您需要执行动作,而 DAG 路径将确定流量以及可以应用的任何并行度 。您可以在Spark UI中看到它。

演示:

rdd1 = get some data
rdd2 = get some other data
rdd3 = get some other other data
rddA = rdd1 union rdd2 union rdd3
rddA.toDF.write ...

// followed by 

rdd1' = get some data
rdd2' = get some other data
rdd3' = get some other other data
rddA' = rdd1 union rdd2 union rdd3
rddA'.toDF.write ...

rddA'.toDF.write ...将在rddA.toDF.write之后发生... rdd1'和rdd2'和rdd3'的转换都不会与rddA.toDF.write的转换/动作并行发生。事实并非如此。这意味着,如果要编写并行性,则需要两个单独的SPARK应用程序-同时运行-只要资源允许,就可以并行运行。