0

我有如下跨越不同RDDS序列多个工会:多个工会 - 如何星火生成计划

val result = rdd1 union rdd2 union rdd3 union rdd4 

将激发产生的工会串行(这是O(n)),或将引发生成一个计划,平行(O(日志(n))的?IE浏览器将它并行做rdd1 union rdd2rdd3 union rdd4和这两个人?

回答

3

您可以使用rdd1.union(rdd2)采取的两个工会则联合的结果RDDs。在这种情况下,为每对RDD添加一个新的UnionRDD。或者,您可以使用我们e sc.union(Seq(rdd1, rdd2))用于同时取得两个以上RDD的联合。在这种情况下,无论组合多少个RDD,只创建一个UnionRDD

RDD的联合非常简单:它只是将一个RDD的分区放在另一个RDD的分区之后。因为实际的计算发生在分区上,所以在RDD联合上运行的运行时间与在没有联合的情况下在RDD上运行所花费的时间相同。因此,工会的成本通常可以忽略不计。

+0

也许值得一提的是'rdd1.union(rdd2)'不会触发任何计算。 RDD转换是懒惰的。它们只影响计算最终由计算触发时的计算方式。另一件事是分区总是并行处理,每个执行核心一个。因此,如果您拥有100个内核,则您将100个RDD与1个分区(使用任意一种方法)结合起来,结果将成为并行处理的所有任务。 O(n)和O(log(n))都不是。 –