我想将数据从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: building classifiers for each data group与我遇到的问题类似,到那时显然还没有很好的解决方案。但是3年前,我想知道它现在是否可以解决。