You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spark 3.2.0 Scala环境下LinearRegressionWithSGD实例化失败求助

解决方案:Spark 3.2.0中LinearRegressionWithSGD的正确使用方式

1. API变更说明

Spark 3.x版本里,org.apache.spark.mllib.regression.LinearRegressionWithSGD的构造器被设置为私有,不再允许通过new直接实例化。同时,这套基于RDD的旧mllib API已进入维护状态,官方更推荐使用基于DataFrame的新ml API。

2. 旧mllib API的使用方法

如果必须沿用旧API,不要尝试实例化类,直接调用其静态train方法训练模型:

import org.apache.spark.mllib.regression.LinearRegressionWithSGD
import org.apache.spark.mllib.regression.LabeledPoint
import org.apache.spark.mllib.linalg.Vectors

// 构造训练数据
val data = sc.parallelize(Seq(
  LabeledPoint(1.0, Vectors.dense(0.0, 1.0)),
  LabeledPoint(2.0, Vectors.dense(1.0, 2.0)),
  LabeledPoint(3.0, Vectors.dense(2.0, 3.0))
))

// 直接调用静态train方法生成模型
val model = LinearRegressionWithSGD.train(data, iterations = 100, stepSize = 0.01)

3. 推荐方案:迁移到新ml API

官方推荐使用org.apache.spark.ml.regression.LinearRegression,它支持DataFlow、Pipeline、交叉验证等更多特性,实现分组线性回归的示例如下:

import org.apache.spark.ml.regression.LinearRegression
import org.apache.spark.ml.feature.VectorAssembler
import org.apache.spark.sql.functions.col

// 构造分组训练数据
val df = spark.createDataFrame(Seq(
  ("group1", 0.0, 1.0, 1.0),
  ("group1", 1.0, 2.0, 2.0),
  ("group2", 2.0, 3.0, 3.0),
  ("group2", 3.0, 4.0, 4.0)
)).toDF("group", "feat1", "feat2", "label")

// 按分组训练模型
val groupedModels = df.groupBy("group").mapGroups { case (groupKey, rows) =>
  val groupDf = spark.createDataFrame(rows)
  // 组装特征向量
  val assembler = new VectorAssembler()
    .setInputCols(Array("feat1", "feat2"))
    .setOutputCol("features")
  val assembledDf = assembler.transform(groupDf)
  
  // 训练线性回归模型
  val lr = new LinearRegression()
    .setLabelCol("label")
    .setFeaturesCol("features")
  val model = lr.fit(assembledDf)
  
  (groupKey, model.coefficients, model.intercept)
}.collect()

// 输出各分组模型参数
groupedModels.foreach { case (group, coeffs, intercept) =>
  println(s"分组:$group,系数:$coeffs,截距:$intercept")
}

核心提示

  • 旧mllib API的LinearRegressionWithSGD仅支持RDD输入,只能通过静态train方法调用;
  • 新ml API功能更完善,适配Spark现代数据处理流程,且会持续得到官方更新;
  • 实现分组回归时,新API可通过groupBy.mapGroups为每个分组单独训练模型。

内容的提问来源于stack exchange,提问作者gffryclrk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 01:25:27