我有两个来源,它们可以是不同类型的来源(数据库或文件),也可以是相同类型的。
数据集1 = source1.load;
Dataset2 = source2.load;
spark会并行将数据加载到不同的数据集中吗?还是会按顺序加载?
答案 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应用程序-同时运行-只要资源允许,就可以并行运行。