我正在尝试使用sparklyr
调整模型。使用for循环调整参数并不是按预期方式并行工作,而是需要花费大量时间。
我的问题:
我可以用它来并行化工作吗?
id_wss <- NA
for (i in 2:8)
{
id_cluster <- ml_kmeans(id_ip4, centers = i, seed = 1234, features_col = colnames(id_ip4))
id_wss[i] <- id_cluster$cost
}
答案 0 :(得分:0)
在并发性方面,您的代码没有特别的错误:
ml_kmeans(...)
。因为循环不会影响它。将按照预期使用群集上可用的资源对每个模型进行培训。外部循环是驱动程序代码。在正常情况下,我们在使用Spark时使用标准的单线程代码(在这个级别上不是多线程实际上是一个选项R)。
通常(Scala,Python,Java)可以使用单独的线程同时提交多个Spark作业,但实际上它需要大量的调优和对低级API的访问。即使在那里,也很少值得大惊小怪,除非你拥有明显过载的群集。
话虽如此,请记住,如果将Spark K-Means与适合内存的数据的本地实现进行比较,事情将会相对缓慢。使用随机初始化might help speed things up:
ml_kmeans(id_ip4, centers = i, init_mode = "random",
seed = 1234, features_col = colnames(id_ip4))
在附带算法的旁注中,可以使用其中一个可用的评估者(ml_binary_classification_evaluator
,ml_multiclass_classification_evaluator
,ml_regression_evaluator
轻松评估,您可以使用ml_cross_validator
/ { {1}}而不是手动循环。