最近在想一个问题,使用spark mllib训练后的模型如何做一个在线预测的服务? 毕竟mllib只提供离线的训练和预测。想到大概有四种方法:
1. 使用spark streaming + kafka
直接使用spark streaming加载训练好的模型,然后通过从kafka上读取特征来预测数据,并将预测结果写回kafka中供客户端获取到。
2. spark + grpc
通过将spark mllib中的predict函数做成rpc service的形式,具体参考:
https://scalapb.github.io/grpc.html
3. spark + spray
通过spark mllib中的predict函数做restful的形式来预测。
4. spark + python flask
通过python调用spark mllib训练好的模型,借助flash提供接口
5. spark + python grpc
通过python grpc调用spark mllib训练好的模型,提供其它语言rpc接口
目前方法1, 4, 5是可行, 方法2,3并没有实际实现的经验,还需再探索。