вычислить несколько кадров данных параллельно с искрой - PullRequest
0 голосов
/ 28 февраля 2019

Я хотел бы использовать свойство параллелизации spark для параллельного вычисления нескольких фреймов данных spark.

Что я делаю: foreach id из IDList (состоящего из более чем 100 000 элементов), я запрашиваю 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)    

    })

это работает, но этот метод выполняет процесс по одному идентификатору после одного.

Как распараллелить процесс, чтобы сделать его более эффективным?Одним из ограничений является то, что мне нужно sparkContext внутри executeQuery и sparSession в executeAlgorithm, и они не сериализуемы.Я запускаю это на кластере пряжи.

Спасибо заранее

1 Ответ

0 голосов
/ 28 февраля 2019

Если все, что вам нужно - это выполнять задания параллельно, тогда вы можете просто использовать параллельный сбор:

IDList.par.foreach

Более того, если вы хотите контролировать параллелизм количества заданийзапустить сразу, тогда вы можете назначить свой собственный tasksupport параллельному списку, возвращенному из IDList.par.Как только задания будут отправлены параллельно, spark будет использовать свой планировщик для баланса между ними.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...