Spark Transformation - 为什么它的懒惰和优势是什么?

时间:2016-06-25 11:14:43

标签: apache-spark transformation lazy-evaluation

Spark Transformations被懒惰地评估 - 当我们调用该动作时,它会根据沿袭图执行所有变换。

对Lazilyy转换进行评估有什么好处?

与热切评估相比,它会改善performancememory consumption的数量吗?

对转换进行懒惰评估是否有任何不利之处?

3 个答案:

答案 0 :(得分:18)

对于转换,Spark将它们添加到计算的DAG中,并且仅当驱动程序请求某些数据时,才会实际执行此DAG。

这样做的一个优点是Spark可以在有机会完整地查看DAG之后做出许多优化决策。如果它一到达它就会执行所有操作,这是不可能的。

例如 - 如果你急切地执行每一次转变,那意味着什么?嗯,这意味着你必须在内存中实现许多中间数据集。这显然效率不高 - 例如,它会增加您的GC成本。 (因为你真的对这些中间结果不感兴趣。在编写程序时,这些只是你的抽象抽象。)所以,你做的是 - 你告诉Spark你最感兴趣的是什么,它找出了到达那里的最佳方式。

答案 1 :(得分:5)

考虑一个1 GB的日志文件,其中包含错误,警告和信息消息,它在HDFS中作为64或128 MB的块存在(在此上下文中无关紧要)。您首先创建一个名为“input”的RDD这个文本文件。然后,通过在“输入”RDD上应用过滤器来创建另一个称为“错误”的RDD,以仅获取包含错误消息的行,然后在“错误”RDD上调用操作first()。 Spark将在任何分区中找到第一次出现错误消息后立即停止,从而优化日志文件的处理。如果在急切评估中重复了相同的场景,Spark会过滤日志文件的所有分区,即使您只对第一条错误消息感兴趣。

答案 2 :(得分:3)

来自https://www.mapr.com/blog/5-minute-guide-understanding-significance-apache-spark

  

懒惰评估意味着如果你告诉Spark操作一组数据,它会听你要求它做什么,写下一些简写,以便它不会忘记,然后绝对没有。它会继续无所作为,直到你问它最后的答案。 [...]

     

它会一直等到你给它操作员完成,并且只有当你要求它给你最终答案时它才会评估,并且它总是看起来要限制它必须做多少工作。

节省了时间和不必要的处理能力。