Scala 使用小数据集激发性能
我正在测试以下工作流:Scala 使用小数据集激发性能,scala,apache-spark,data-science,Scala,Apache Spark,Data Science,我正在测试以下工作流: 从大量数据中构建模型。(Python) 使用该模型在生产服务器中执行评估。(斯卡拉) 我正在使用一个带有向量索引器和GBTRegressor的管道。我有5个输入列(目前。最终,我们希望添加更多)。我也许可以只使用GBTRegressor,或者如果它有什么不同的话,甚至可以使用另一个模型 步骤1在由8台机器组成的集群上大约需要15分钟,这很好。第2步估计单个值大约需要100毫秒。我们希望将其作为API调用的一部分返回,因此100ms太长 我知道spark适用于大型数据集,这
val spark = SparkSession.builder()
.master("local")
.appName("Rendition Size Estimate")
.config("spark.ui.enabled",false)
.getOrCreate()
model = PipelineModel.load(r.getPath)
....
val input = RenditionSizeEstimator.spark.createDataFrame(Seq(
(0.0, Vectors.dense(x1, x2, x3, x4, x5))
)).toDF("label", "features")
val t = model.transform(input)
return t.head().getDouble(3) //column three is the prediction
相关Qs:
更新:最后一个是寻找如何服务于预测。我已经知道了(一种方法),但我关心的是性能。我对Spark PipelineModel“实时”服务的最佳选择是 要使用它,您必须:
- 使用MLeap实用程序序列化Spark模型
- 在MLeap中加载模型(不需要SparkContext或任何Spark依赖项)
- 用JSON(不是数据帧)创建输入记录
- 使用MLeap为您的记录打分
如果100毫秒太多,那么你选择了一个错误的工具。然而,构建模型和服务模型是完全不同的关注点。有许多工具是为生产电离火花模型而设计的。