如何在分类器中的实例取决于分类索引的情况下训练带有分类器的分类器?例如,假设以下代码片段:
val data = MLUtils.loadLibSVMFile(sc, "path to SVM file")
val r = data.mapPartitionsWithIndex((index,localdata)=>{
if (index % 2 == 0)
{
// train a NaiveBayes with localdata
NaiveBayes.train(localdata) // Error => found:iterator[LabeledPoint] , required: RDD[labeledPoint]
}
else
{
// train a DecisionTree classifier with localdata
DecisionTree.train(localdata) // Error => found:iterator[LabeledPoint] , required: RDD[labeledPoint]
}
})
在我看来,错误是正确的,因为这些任务是在各自的JVM中执行的,无法从map任务中分发。这就是为什么我无法在任务中访问SparkContext的原因。但是,是否有人有其他建议可以实现我的目的?
基于以上评论部分的讨论-您可以尝试一下-
val rdd = MLUtils.loadLibSVMFile(sc, "path to SVM file")
// approach -1
val nb = rdd.sample(withReplacement = false, fraction = 0.5) // sample 50% of the record
val dt = rdd.sample(withReplacement = false, fraction = 0.5) // sample 50% of the record
//or approach-2
val (nb, dt) = rdd.randomSplit(Array(0.5, 0.5))
// apply algo
NaiveBayes.train(nb)
DecisionTree.train(dt, strategy= ..)