如何在典型 ML 模型中加载 Spark 流模型或将经过训练的典型 ML 模型加载到流 ML 模型?

时间:2021-01-10 15:35:57

标签: apache-spark spark-streaming

我现在的工作是测试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

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

任何评论将不胜感激

1 个答案:

答案 0 :(得分:-1)

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

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

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