Apache spark 如何将多个ML管道(模型)应用于同一火花流

Apache spark 如何将多个ML管道(模型)应用于同一火花流,apache-spark,apache-kafka,spark-streaming,apache-spark-ml,Apache Spark,Apache Kafka,Spark Streaming,Apache Spark Ml,我有一个用例,在这个用例中,我必须在同一个火花流(取自卡夫卡)上应用多个已经训练过的模型(例如M1、M2、…Mn) 使用隔离林算法对模型进行训练,如下所示: 我在这里发现了与我的案例类似的东西,但不幸的是,我不知道Genesys公司(前AltoCloud)是否将此API(StreamPipeline,异构管道)开源 我用上面的模式代码处理了这个问题,但我不知道它有多最优 //read the stream val kafkaStreamDF = spark .readStream

我有一个用例,在这个用例中,我必须在同一个火花流(取自卡夫卡)上应用多个已经训练过的模型(例如M1、M2、…Mn)

使用隔离林算法对模型进行训练,如下所示:

我在这里发现了与我的案例类似的东西,但不幸的是,我不知道Genesys公司(前AltoCloud)是否将此API(StreamPipeline,异构管道)开源

我用上面的模式代码处理了这个问题,但我不知道它有多最优

//read the stream
val kafkaStreamDF = spark
      .readStream
      .format("kafka")
      .option("kafka.bootstrap.servers", broker)
      .option("subscribe", "topic")
      .load
val myModels = Array("m1", "m2","m3","m4")
//parallize the input models in order to have multiple threads handling the same stream, otherwise blocked??
 myModels.par.foreach(lm => {

     //load the model     
     val model = PipelineModel.load(lm)

      kafkaStreamDF.writeStream.foreachBatch({ (batchDF: DataFrame, batchId: Long) =>
        //apply model
        val pdf = model.transform(batchDF).selectExpr("CAST(to_json(struct(*)) AS STRING) AS value").write
          .format("json")
          .save("anom/" + lm +  System.currentTimeMillis())
      }).start().awaitTermination()
    })
问题: 1.因此,我想知道是否有任何Spark API用于处理此类用例

  • 如果是,我在哪里可以找到它

  • 如果否,我如何以最佳方式实施此功能

  • 非常感谢您的任何想法和建议。

    好吧,可以这样做。。。。但如果您的处理时间超过了接收时间怎么办。消息将堆积起来,这将导致流式接收速度减慢。使用树结构对数据进行建模。完成算法需要一些时间

    我更喜欢像hdfs分区一样存储在存储器中。。。并以固定的时间间隔批量应用ML。因此,您可以毫不延迟地接收消息,并有效地处理它们