Я хотел бы перераспределить данные с RDD[LabeledPoint]
на K
разделов и использовать раздел K
для обучения соответственно K
ml
моделей.
Самая близкая операция, которую я знаю, может произвести это: .mapPartitionsWithIndex
, но она возвращает Iterator[LabeledPoint]
, в то время как модель принимает RDD[LabeledPoint]
в качестве ввода. Я думаю, что я могу преобразовать Iterator[LabeledPoint]
в RDD[LabeledPoint]
, но это кажется избыточным конвертировать из RDD в Iterator и обратно.
Ниже приведено то, что я имею до сих пор.
val K = model.size // models:Array[(idx, Model)]
data.repartition(K) //RDD[LabeledPoint]
data.mapPartitionsWithIndex {
case (i, dat) => {
val datByPartition = dat // dat:Iterator[LabeledPoint]
models(i).train(datByPartition) // however input of "train" needs to be RDD[LabeledPoint]
...
}
}
Любые предложения будут с благодарностью!
Spark MLlib: построение классификаторов для каждой группы данных похоже на проблему, с которой я столкнулся, очевидно, к тому времени не было хорошего решения. Но это было 3 года назад, мне интересно, разрешимо ли это сейчас.