如何在Spark流程运行时重新加载模型?

时间:2017-03-24 13:12:05

标签: scala apache-spark spark-streaming apache-spark-mllib

我有配置文件myConfig.conf,其中预测模型的路径被定义为参数pathToModel。我正在阅读此文件一次以获得pathToModel。 但是,现在我想略微更新逻辑 - 我希望能够在配置文件中更新pathToModel时重新加载预测模型。

这是我目前的代码:

val pathToModelPar = ConfigFactory.load("myConfig.conf")
val pathToModel = pathToModelPar.getString("pathToModel")
val model = GradientBoostedTreesModel.load(sc,pathToModel)
myDStream.foreachRDD(myRDD => {
  myRDD.foreachPartition({ partitionOfRecords =>
    //...
    val predictions = model.predict(...)
    //...
  })
})

我认为可以每小时检查一次文件config.conf,然后可以应用IF-THEN规则 - 如果新pathToModel与当前pathToModel不同,那么<{1}}已重新加载。

但是,我不知道如何在流数据的上下文中实现这种重新加载。据我所知,如果我在model之外将IF-THEN规则置于之外,则只会在流式传输过程开始时进行检查。如果我将IF-THEN规则置于 myDStream.foreachRDD(myRDD => {...})内,那么由于在myDStream.foreachRDD(myRDD => {...})中使用sc,我将收到任务序列化错误。这就是问题所在。有什么想法吗?

我试过这种方法,但它只加载模型一次:

load

0 个答案:

没有答案