2016-10-28 33 views
1

accessLogs.saveAsTextFile(outputDirectory1)兩大RDDS保存並行

accessList.saveAsTextFile(outputDirectory2)

如何並行,而不是系列節省了RDD?

+1

你需要分開還是想要有單個文件? – sb0709

+0

如果我可能問這是什麼原因?有什麼收穫? – eliasah

回答

1

您可以將它們保存爲線程。

new Thread() { 
     override def run(): Unit = { 
accessLogs.saveAsTextFile(outputDirectory1) 
     } 
    }.start() 

    new Thread() { 
     override def run(): Unit = { 
accessList.saveAsTextFile(outputDirectory2) 
     } 
    }.start() 

saveAsTextFile不會返回任何東西,所以我不確定爲什麼要設置返回值。

+0

謝謝我的壞,沒有回報價值。它只是堅持不同的rdds到不同的文件。 –

3
import scala.concurrent._ 
import scala.concurrent.duration._ 

val rdds = Seq(accessLogs, accessLists) 
val dirs = Seq("outputDirectory1", "outputDirectory2") 

import ExecutionContext.Implicits.global 
val future = Future.sequence(
    for ((rdd, dir) <- rdds zip dirs) yield Future(rdd.saveAsTextFile(dir)) 
) 
//Await.ready(future, Duration.Inf) //to wait for rdds to be saved... 

注意,儘管名稱,上面使用將執行從Futures並聯換理解所得,而不是順序地Future伴侶對象上的方法sequence。這種sequence方法本質上是一個應用函子sequence