Servir previsões em tempo real com o modelo Spark ML treinado [duplicado]

Esta pergunta já tem uma resposta aqui:

Como servir um modelo Spark MLlib? 3 respostas

No momento, estamos testando um mecanismo de previsão baseado na implementação do LDA do Spark em Python:https://spark.apache.org/docs/2.2.0/ml-clustering.html#latent-dirichlet-allocation-lda https://spark.apache.org/docs/2.2.0/api/python/pyspark.ml.html#pyspark.ml.clustering.LDA (estamos usando o pacote pyspark.ml, não pyspark.mllib)

Conseguimos treinar com sucesso um modelo em um cluster Spark (usando o Google Cloud Dataproc). Agora, estamos tentando usar o modelo para veicular previsões em tempo real como uma API (por exemplo, aplicativo de balão).

Qual seria a melhor abordagem para alcançá-lo?

Nosso principal ponto negativo é que parece que precisamos recuperar todo o ambiente Spark para carregar o modelo treinado e executar a transformação. Até o momento, tentamos executar o Spark no modo local para cada solicitação recebida, mas essa abordagem nos deu:

Baixo desempenho (hora de acelerar o SparkSession, carregar os modelos, executar a transformação ...)Escalabilidade ruim (incapacidade de processar solicitações simultâneas)

Toda a abordagem parece bastante pesada, haveria uma alternativa mais simples, ou mesmo uma que não precisaria implicar no Spark?

Abaixo estão os códigos simplificados das etapas de treinamento e previsão.

Código de treinamento
def train(input_dataset):   
    conf = pyspark.SparkConf().setAppName("lda-train")
    spark = SparkSession.builder.config(conf=conf).getOrCreate()

    # Generate count vectors
    count_vectorizer = CountVectorizer(...)
    vectorizer_model = count_vectorizer.fit(input_dataset)
    vectorized_dataset = vectorizer_model.transform(input_dataset)

    # Instantiate LDA model
    lda = LDA(k=100, maxIter=100, optimizer="em", ...)

    # Train LDA model
    lda_model = lda.fit(vectorized_dataset)

    # Save models to external storage
    vectorizer_model.write().overwrite().save("gs://...")
    lda_model.write().overwrite().save("gs://...")
Código de previsão
def predict(input_query):
    conf = pyspark.SparkConf().setAppName("lda-predict").setMaster("local")
    spark = SparkSession.builder.config(conf=conf).getOrCreate()

    # Load models from external storage
    vectorizer_model = CountVectorizerModel.load("gs://...")
    lda_model = DistributedLDAModel.load("gs://...")

    # Run prediction on the input data using the loaded models
    vectorized_query = vectorizer_model.transform(input_query)
    transformed_query = lda_model.transform(vectorized_query)

    ...

    spark.stop()

    return transformed_query

questionAnswers(1)

yourAnswerToTheQuestion