【发布时间】:2018-09-21 13:41:22
【问题描述】:
我正在测试以下工作流程:
- 从大量数据中构建模型。 (Python)
- 使用模型在生产服务器中执行估计。 (斯卡拉)
我正在使用带有 VectorIndexer 和 GBTRegressor 的管道。我有 5 个输入列(目前。最终,我们想添加更多)。我也许可以只使用 GBTRegressor,或者如果它有所作为,甚至可以使用其他模型。
在 8 台机器的集群上,第 1 步大约需要 15 分钟,这很好。步骤 2 估计单个值大约需要 100 毫秒。我们希望将此作为 API 调用的一部分返回,因此 100 毫秒太长了。
我知道 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
相关问题:
- Apache Spark's performance tuning
- Speedup Spark classifier on small datasets
- Spark cluster does not scale to small data
- How to serve a Spark MLlib model?
更新:最后一个正在寻找如何提供预测。我已经知道(一种方式)如何,但我担心性能。
【问题讨论】:
-
如果 100 毫秒太多,那么您选择了错误的工具。然而,构建模型和服务模型是完全不同的问题。有许多工具专门用于生产 Spark 模型。
标签: scala apache-spark data-science