2016-12-26 266 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()完成)或异步(线程将获得未来的对象,并传递给下一条指令

相关问题