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))都不是。 –