Как провести параллельное обучение модели для каждого раздела в spark с помощью scala? Приведенное здесь решение находится в Pyspark. Я ищу решение в scala. Как вы можете эффективно построить одну модель машинного обучения для каждого раздела в Spark с помощью foreachPartition?
Обучение моделей мл на искре по разделам. Так что будет обученная модель для каждого раздела фрейма данных
Ответы (1)
- Получите отдельные разделы, используя раздел col
- Создайте пул потоков, скажем, из 100 потоков.
- создать будущий объект для каждого потока и запустить
пример кода может быть следующим:
// 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