【问题标题】:Looking for 'for loop' alternative in sparklyr在 sparklyr 中寻找“for loop”替代方案
【发布时间】:2018-10-05 10:12:45
【问题描述】:

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

【问题讨论】:

    标签: r apache-spark for-loop sparklyr


    【解决方案1】:

    您的代码在并发方面没有什么特别的问题:

    • 分布式并行部分是模型拟合过程ml_kmeans(...)。 For循环不会影响这一点。每个模型都将按预期使用集群上可用的资源进行训练。
    • 外循环是驱动程序代码。在正常情况下,我们在使用 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/ml_train_validation_split 而不是手动循环(请参阅例如How to train a ML model in sparklyr and predict new values on another dataframe?)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-04
      • 2011-11-14
      • 2020-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多