并行保存两个RDD

时间:2016-10-28 23:28:10

标签: scala apache-spark

accessLogs.saveAsTextFile(outputDirectory1)

accessList.saveAsTextFile(outputDirectory2)

如何并行保存RDD而不是串行保存?

2 个答案:

答案 0 :(得分: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...

请注意,尽管名称如此,上面使用的sequence随播广告对象上的方法Future将执行并行而非顺序执行的Futuressequence。这个sequence方法本质上是一个应用仿函数WMIC ComputerSystem where Name=COMPUTERNAME call Rename Name=NewName

答案 1 :(得分:1)

您可以将它们保存在线程中。

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

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

saveAsTextFile没有返回任何内容,因此我不确定您为什么要设置返回值。