你如何在 Spark 中并行创建 RDD / DataFrame?

How do you parallelize RDD / DataFrame creation in Spark?

假设我有一个 spark 作业,如下所示:

def loadTable1() {
  val table1 = sqlContext.jsonFile(s"s3://textfiledirectory/")
  table1.cache().registerTempTable("table1")
}  

def loadTable2() {
  val table2 = sqlContext.jsonFile(s"s3://testfiledirectory2/")
  table2.cache().registerTempTable("table2")
} 


def loadAllTables() {
  loadTable1()
  loadTable2()
}

loadAllTables()

如何并行化此 Spark 作业以便同时创建两个表?

您可以使用标准 Scala 线程机制来完成此操作。就我个人而言,我想做一个带有路径和 table 名称的对列表,然后在上面进行平行映射。您还可以查看期货或标准线程。

您不需要将其并行化。 RDD/DF 创建操作不执行任何操作。这些数据结构是 lazy,因此任何实际计算只会在您开始使用它们时发生。当 Spark 计算确实发生时,它将自动并行化(逐个分区)。 Spark 将在执行器之间分配工作。因此,您通常不会通过引入进一步的并行性来获得任何好处。

使用期货!

implicit val ec = ExecutionContext.fromExecutor(Executors.newFixedThreadPool(10))

def loadAllTables() {
  Future { loadTable1() }
  Future { loadTable2() }
}