Spark Scala, тренируй много моделей одновременно - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть набор данных train и test с функциями и несколькими тысячами значений customerId.Моя цель состоит в том, чтобы одновременно обучить один двоичный xgboost классификатор на customerId в Spark.

Я, по сути, пытаюсь сделать то, о чем спрашивает плакат в этой теме , но вСкала вместо PySpark.Из прочтения я понимаю, что ответ дается в следующем документе , но я не уверен, как его реализовать.Документация по планированию заданий для Spark сообщает мне, что мне нужно инициировать обучение каждой модели из отдельных потоков.

Пока мой код выглядит примерно так:

// Data
val train: DataFrame = ...
val test: DataFrame = ...

// Model
val xgbClassifier: XGBoostClassifier = ...

// List of unique customerId's
val customers: List[Int] = ...

// Function for training and predicting for a given customer
def trainAndPredict(customer: Int): DataFrame = {
  val train_subset = train.filter($"customerId" === customer)
  val test_subset = test.filter($"customerId" === customer)
  ...
}

// Recursively train and predict for all customers
@tailrec
final def recTrainAndPredict(customers: List[Int], acc: DataFrame): DataFrame = customers match {
  case Nil => acc
  case x :: xs => recTrainAndPredict(xs, acc.union(trainAndPredict(x)))
}

val result = recTrainAndPredict(customers, spark.emptyDataFrame)

Код выполняется,но я предполагаю, что это тратит много времени, разбрасывая небольшие наборы данных по разным узлам.Как бы мне было добиться одновременного выполнения разных вызовов trainAndPredict, не жертвуя временем, распределяя работу по разным узлам?

...