在sparklyr中寻找'for loop'替代品

时间:2018-04-25 03:40:16

标签: r apache-spark for-loop sparklyr

我正在尝试使用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
}

1 个答案:

答案 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_evaluatorml_multiclass_classification_evaluatorml_regression_evaluator轻松评估,您可以使用ml_cross_validator / { {1}}而不是手动循环。