如何通过分区在RDD上进行操作?

时间:2018-11-01 08:47:06

标签: apache-spark rdd

我想将数据从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年前,我想知道它现在是否可以解决。

0 个答案:

没有答案