У нас есть ситуация, когда нам нужно запустить линейную регрессию для миллионов небольших наборов данных и сохранить веса и перехват для каждого из этих наборов данных. Для этого я написал приведенный ниже код scala, в котором я передал каждый из этих наборов данных в виде строки в RDD, а затем попытался запустить регрессию для каждого (данные - это RDD, в котором хранятся (метки, функции) в каждом row, в этом случае у нас есть одна функция на метку):
val x = data.flatMap { line => line.split(' ')}.map { line =>
val parts = line.split(',')
val parsedData1 = LabeledPoint(parts(0).toDouble, Vectors.dense(parts(1).split(' ').map(_.toDouble)))
val model = LinearRegressionWithSGD.train(sc.parallelize(List(parsedData1)),100)//using parallelize to convert data to type RDD
(model.intercept,model.weights)
}
Проблема здесь в том, что LinearRegressionWithSGD ожидает ввода RDD, а вложенные RDD не поддерживаются в Spark. Я выбрал этот подход, поскольку все эти наборы данных можно запускать независимо друг от друга, и, следовательно, я хотел их распространять (следовательно, исключая зацикливание). Не могли бы вы предложить, могу ли я использовать другие типы (массивы, списки и т. д.) для ввода в качестве набора данных в LinearRegressionWithSGD или даже лучший подход, который по-прежнему будет распределять такие вычисления в Spark?
LinearRegressionWithSGD
используется для обучения большого набора данных. - person zsxwing   schedule 12.11.2014