我们有一种情况,我们必须对数百万个小数据集运行线性回归,并存储每个数据集的权重和截距。我编写了下面的 scala 代码来执行此操作,其中我将这些数据集中的每一个作为 RDD 中的一行提供,然后我尝试对每个数据集运行回归(数据是 RDD,其中存储了(标签,特征)在每个行,在这种情况下,每个标签都有一个特征):
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 作为输入,而 Spark 不支持嵌套的 RDD。我选择了这种方法,因为所有这些数据集都可以彼此独立运行,因此我想分发它们(因此,排除了循环)。您能否建议我是否可以使用其他类型(数组、列表等)作为数据集输入到LinearRegressionWithSGD,或者甚至是一种更好的方法,仍然可以在 Spark 中分配此类计算?