Я использую Spark для классификации набора данных о доходах переписи с помощью алгоритма случайного леса. Мои рабочие (w1 и w2) имеют один процессор (4 ядра). Когда я настраиваю Spark на использование только w1 в качестве рабочего, создание модели занимает около 12 секунд. Когда я настраиваю Spark для использования как w1, так и w2 в качестве рабочего, для построения модели снова требуется 12 секунд. Я вижу с помощью 'htop', что загрузка ЦП обоими рабочими увеличивается, когда я запускаю код. Однако я ожидаю, что время выполнения будет меньше! Когда я использую большие наборы данных, я могу достичь меньшего времени выполнения.
Вот мой фрагмент кода:
import org.apache.spark.mllib.tree.RandomForest
import org.apache.spark.mllib.tree.model.RandomForestModel
import org.apache.spark.mllib.util.MLUtils
// Load and parse the data file.
val data = MLUtils.loadLibSVMFile(sc, "data/Census-income.libsvm")
// Split the data into training and test sets (30% held out for testing)
val splits = data.randomSplit(Array(0.7, 0.3))
val (trainingData, testData) = (splits(0), splits(1))
// Train a RandomForest model.
// Empty categoricalFeaturesInfo indicates all features are continuous.
val numClasses = 2
val categoricalFeaturesInfo = Map[Int, Int]()
val numTrees = 3 // Use more in practice.
val featureSubsetStrategy = "auto" // Let the algorithm choose.
val impurity = "gini"
val maxDepth = 4
val maxBins = 32
val model = RandomForest.trainClassifier(trainingData, numClasses, categoricalFeaturesInfo,
numTrees, featureSubsetStrategy, impurity, maxDepth, maxBins)
// Evaluate model on test instances and compute test error
val labelAndPreds = testData.map { point =>
val prediction = model.predict(point.features)
(point.label, prediction)
}
val testErr = labelAndPreds.filter(r => r._1 != r._2).count.toDouble / testData.count()
println(s"Test Error = $testErr")
В чем проблема? Любые комментарии приветствуются.