PipelineModel是线程安全的吗?

时间:2017-01-31 19:51:44

标签: java apache-spark

我在集群环境中将训练有素的模型导出到文件系统 - PipelineModel.save("PATH")。想法是在Web应用程序后面使用此训练模型并调用转换方法(PipelineModel.transform)以在非群集环境中进行实时预测。

模型可以通过两种方式加载 - PipelineModel.load("PATH")

方法1-为每个请求加载模型 方法2-仅加载模型一次(最好在服务器启动期间)并对所有请求使用相同的模型。

我更喜欢方法2,因为它更快。但问题是 - 变换方法线程安全吗?

1 个答案:

答案 0 :(得分:0)

你在这里通过线程安全意味着什么?它是一个静态方法,它反过来调用以下方法,该方法返回一个新的Pipeline模型实例。重新调用该方法将返回一个新实例。

override def load(path: String): PipelineModel = {
  val (uid: String, stages: Array[PipelineStage]) = SharedReadWrite.load(className, sc, path)
  val transformers = stages map {
    case stage: Transformer => stage
    case other => throw new RuntimeException(s"PipelineModel.read loaded a stage but found it" +
      s" was not a Transformer.  Bad stage ${other.uid} of type ${other.getClass}")
  }
  new PipelineModel(uid, transformers)
}