Обучение моделей мл на искре по разделам. Так что будет обученная модель для каждого раздела фрейма данных

Как провести параллельное обучение модели для каждого раздела в spark с помощью scala? Приведенное здесь решение находится в Pyspark. Я ищу решение в scala. Как вы можете эффективно построить одну модель машинного обучения для каждого раздела в Spark с помощью foreachPartition?


person Bhushan Gosavi    schedule 13.04.2020    source источник


Ответы (1)


  1. Получите отдельные разделы, используя раздел col
  2. Создайте пул потоков, скажем, из 100 потоков.
  3. создать будущий объект для каждого потока и запустить

пример кода может быть следующим:

   // Get an ExecutorService 
    val threadPoolExecutorService = getExecutionContext("name", 100)
// check https://github.com/apache/spark/blob/master/mllib/src/main/scala/org/apache/spark/ml/param/shared/HasParallelism.scala#L50

   val uniquePartitionValues: List[String] = ...//getDistingPartitionsUsingPartitionCol
    // Asynchronous invocation to training. The result will be collected from the futures.
    val uniquePartitionValuesFutures = uniquePartitionValues.map(partitionValue => {
      Future[Double] {
        try {
            // get dataframe where partitionCol=partitionValue
            val partitionDF = mainDF.where(s"partitionCol=$partitionValue")
          // do preprocessing and training using any algo with an input partitionDF and return accuracy
        } catch {
          ....
      }(threadPoolExecutorService)
    })

    // Wait for metrics to be calculated
    val foldMetrics = uniquePartitionValuesFutures.map(Await.result(_, Duration.Inf))
    println(s"output::${foldMetrics.mkString("  ###  ")}")
person Som    schedule 13.05.2020