你如何在 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() }
}
假设我有一个 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() }
}