2016-12-26 61 views
1

我探索火花2.0 Java API和有關於collect() & collectAsync()可供javardd一個疑問。spark javardd方法collect()和collectAsync()之間有什麼區別?

+0

'收集()'在RDD通俗易懂元件的返回清單。 'collectAsync()'給出來自該元素的未來對象可以被回顧。 – mrsrinivas

+0

嗨@JaydeepRameshDeshmukh,如果下面的回答任何回答已經解決了您的問題,請點擊複選標記考慮[接受它(http://meta.stackexchange.com/q/5234/179419)。這向更廣泛的社區表明,您已經找到了解決方案,併爲答覆者和您自己提供了一些聲譽。沒有義務這樣做。 – mrsrinivas

回答

1

收集動作基本上是用來查看RDD的內容,基本上它是同步的,而collectAsync()是它返回一個未來用於檢索這個RDD的所有元素異步含義。它允許運行其他RDD並行運行。爲了更好的優化,你可以利用公平的調度器進行作業調度。

1

collect():

它返回一個包含此RDD中所有元素的數組。

List<Integer> data = Arrays.asList(1, 2, 3, 4, 5); 
JavaRDD<Integer> rdd = sc.parallelize(data, 1); 
List<Integer> result = rdd.collect(); 
//elements in will be copied to driver in above step and control will 
//wait till the action completes 

collectAsync():

異步版本的collect,它返回一個未來java.util.concurrent.Future),用於檢索包含所有在本RDD的元件的陣列。

List<Integer> data = Arrays.asList(1, 2, 3, 4, 5); 
JavaRDD<Integer> rdd = sc.parallelize(data, 1); 
JavaFutureAction<List<Integer>> future = rdd.collectAsync(); 
// retuns only future object but not data (no latency here) 

List<Integer> result = future.get(); 
//Now elements in will be copied to driver 

我們看到我們是如何獲得的數據差異同步只是否(線程將等到行動collect()完成)或異步(線程將獲得未來的對象,並傳遞給下一條指令

相關問題