与Spark并行计算多个数据帧

时间:2019-02-27 21:46:44

标签: scala apache-spark apache-spark-sql

我想使用spark的parallelize属性来并行计算多个spark数据帧。

我该怎么做:foreach一个IDList的ID(由100000多个元素组成),我从数据库中查询df(id)并在df上执行算法。

def main(args: Array[String]): Unit = {

    val sparkConf = new SparkConf().setAppName("scTest")
    val sparkContext = new SparkContext(sparkConf)

    val sparkSession = org.apache.spark.sql.SparkSession.builder
      .appName("sparkSessionTest")
      .getOrCreate

    val IDList = List("ID1",...,"ID100000")

    IDList.foreach(idString => {
      val df = executeQuery(idString,sparkContext)
      executeAlgorithm(df, sparkSession)    

    })

它可以工作,但是此方法在一个ID后面一个ID上执行该过程。

如何并行化流程以提高效率?约束之一是我需要在executeAlgorithm中的executeQuery和sparSession内包含sparkContext,并且它们不可序列化。 我在纱线簇上运行。

先感谢

1 个答案:

答案 0 :(得分:0)

如果您只想并行执行作业,则可以使用并行收集器:

IDList.par.foreach

此外,如果要控制一次运行多少个作业的并行性,则可以将自己的tasksupport分配给从IDList.par返回的并行列表。并行提交作业后,spark将使用其计划程序在它们之间进行平衡。