spark javardd方法有什么区别collect()& collectAsync()?

时间:2016-12-26 15:22:02

标签: java apache-spark rdd

我正在探索spark 2.0 java api并对collect()& collectAsync()可用于javardd。

2 个答案:

答案 0 :(得分:1)

收集操作基本上用于查看RDD的内容,基本上它是同步的,而collectAsync()是异步的,这意味着它返回检索此RDD的所有元素的未来。它允许运行其他RDD并行运行。为了更好的优化,您可以利用公平调度程序进行作业调度。

答案 1 :(得分:1)

收集():

它返回一个包含此RDD中所有元素的数组。

#!/usr/bin/env perl6

use v6;

react {
    whenever IO::Socket::Async.listen('0.0.0.0', 8080) -> $conn {
        whenever $conn.Supply(:bin) -> $buf {
            say "-" x 70 ~ "\n" ~ $buf.decode('UTF-8').trim-trailing;
            sleep 5; # HERE
            my $response = "HTTP/1.0 200 OK\x0D\x0A\x0D\x0A";
            $response ~= q:to/END/;
                <html>
                <head>
                    <title>Demo page</title>
                </head>
                <body>
                <h1>Title here</h1>
                <p>lorem ipsum here</p>
                </body>
                </html>
                END
            await $conn.write: $response.encode('utf-8');
            $conn.close();
        }
    }
}

collectAsync():

{strong>异步版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 ,返回 Future collect),用于检索包含此RDD中所有元素的数组

java.util.concurrent.Future
  

我们看到只有同步(线程会等到动作在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 完成)或异步(线程将获取Future对象并传递给下一条指令