Apache Flink与Apache Spark可以作为大规模机器学习的平台吗?
谁能将Flink和Spark作为机器学习的平台进行比较?哪种算法对迭代算法更好?
Apache Spark通过循环展开执行迭代。这意味着对于每次迭代,计划并执行一组新的任务/操作员。Spark非常高效地执行了此任务,因为它非常擅长进行低延迟的任务调度(顺便说一句,Spark流使用相同的机制),并且在迭代过程中将数据缓存在内存中。因此,每次迭代都基于保存在内存中的前一次迭代的结果。在Spark中,迭代被实现为常规的for循环(请参阅Logistic回归示例)。
Flink执行具有循环数据流的迭代程序。这意味着数据流程序(及其所有运算符)仅被调度一次,并且数据从迭代的尾部反馈到其头部。基本上,数据在一次迭代中围绕运算符循环流动。由于运算符仅被调度一次,因此他们可以在所有迭代中维持状态。Flink的API提供了两个专用的迭代运算符来指定迭代:
1)批量迭代,在概念上类似于循环展开
2)增量迭代。增量迭代可以显着加快某些算法的速度,因为随着迭代次数的增加,每次迭代的工作量都会减少。例如,增量迭代PageRank实现的第10个迭代比第一个迭代快得多。
根据我在ML和数据流处理方面的经验。Flink和Spark擅长不同领域,在ML场景中它们可以互补。Flink可以胜任在线学习任务,其中我们通过消耗新事件并同时进行实时推断来不断更新局部模型。并且部分模型还可以合并基于Spark脱机的历史数据构建的预训练模型。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。