我正在使用Apache Spark进行迭代算法,声称它非常适合。到目前为止,我发现的示例创建了一个具有硬编码迭代次数的单个作业。我需要算法运行直到满足某个条件。
我当前的实现为每个迭代启动一个新工作,如下所示:
var data = sc.textFile(...).map().cache()
while(data.filter(...).isEmpty()) {
// Run the Algorithm (also handles caching)
val data = performStep(data)
}
效率很低。在每次迭代之间,我等待很长时间才能开始下一个工作。对于四台服务器,我在每个作业之间等待大约10秒,对于32台服务器几乎是100秒。总的来说,我最终花费了至少一半的运行时间在作业之间等待。
我发现条件迭代在某些类型的算法中很常见,例如机器学习中的早期停止标准。所以我希望这可以改进。
有更有效的方法吗?例如,在单个作业中运行此条件重复?谢谢!