这个问题已经在这里有一个答案:
我们目前正在测试基于Python中的星火的实现LDA的预测引擎: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(我们使用的是pyspark.ml包,不pyspark.mllib)
我们能够成功地培养出星火集群上的模型(使用谷歌云Dataproc)。现在,我们正试图使用模型来服务的实时预测作为一个API(例如烧瓶应用程序)。
什么是实现所以最好的方法?
我们的主要痛点是,它似乎我们需要带回整个星火环境在以装载训练的模型并进行变换。到目前为止,我们已经试过运行Spark在本地模式下为每个接收到的请求,但这种做法给了我们:
整个方法似乎颇重,会有一个简单的替代,甚至是一个将不需要暗示火花呢?
波纹管被简化的培养和预测步骤的代码。
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://...")
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
如果你已经有火花训练的机器学习模型,您可以使用Hydroshpere雾服务使用rest api
模型(测试或预测),而无需创建一个Spark Context
。这将节省您从重建火花环境,只有在web services
的预测依赖
参考: