我正在探索spark 2.0 java api并对collect()
& collectAsync()
可用于javardd。
答案 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();
}
}
}
{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对象并传递给下一条指令)