【问题标题】:How to load a spark streaming model in typical ML model Or loading a trained typical ML model to streaming ML model?如何在典型的 ML 模型中加载 Spark 流模型或将经过训练的典型 ML 模型加载到流 ML 模型中?
【发布时间】:2026-02-03 14:20:05
【问题描述】:

我现在的工作是测试 Streaming ML 算法的性能,我的想法是在线训练一个 Streaming ML 模型并将模型保存以供离线测试,这就是我所做的。但是当我开始测试性能时,我发现LinearRegressionModel中的权重和截距都是0,这让我很困惑。 我将在下面显示我的代码:

  1. 这是训练流模型的代码,在每批完成 trainOn 时保存或更新模式:
    val lr: StreamingLinearRegressionWithSGD = new StreamingLinearRegressionWithSGD().setInitialWeights(Vectors.zeros(10))
    lr.trainOn(trainingLabeledPointDS)
    val model: LinearRegressionModel = lr.latestModel()
    model.save(ssc.sparkContext,"model path")

    ssc.start()
    ssc.awaitTermination()
  1. 这是离线部分,从 modelPath 加载模型,我认为它应该是权重和截距值,但它全为 0(默认值):
val lrModel: LinearRegressionModel = LinearRegressionModel.load(spark.sparkContext, modelPath)
println(lrModel.weights) // [0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]
println(lrModel.intercept) // 0.0

所以,我想知道有没有办法将我的流模型加载到离线 LinearRegressionModel,或者我可以尝试训练一个离线模型并在我的流模型中使用它?

任何评论将不胜感激

【问题讨论】:

    标签: apache-spark spark-streaming


    【解决方案1】:

    我尝试了很多方法,专注于如何将经过训练的典型 ML 模型加载到流式 ML 模型,这个想法是训练离线模型并保存它。然后,在流式应用程序中,在您新建 StreamingLinearRegressionWithSGD 之前,例如,加载您的离线模型并获取权重(或系数)并截取,然后通过 setter 将其放入您的 StreamingLinearRegressionWithSGD 中。

    但是,我的工作还没有完成,训练一个离线模型并在流式上下文中使用它对我的工作来说是愚蠢的,因为它仍然是一个离线模型而不是在流式上下文中训练的模型,它不能真正反映streamingMLAlgotrithm 的性能。

    我需要一种方法来保存 Streaming ML 模型,任何评论都将不胜感激,非常感谢!!!

    【讨论】: