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

Sha*_*kar 12 transformation lazy-evaluation apache-spark

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

Lazilyy转换评估的优势是什么?

它是否会改进performancememory consumption急切评估的比较数量?

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

Sac*_*agi 20

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

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

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


Sac*_*ran 8

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

惰性求值意味着如果你告诉 Spark 对一组数据进行操作,它会听你要求它做什么,为它写下一些简写以便它不会忘记,然后绝对不做任何事情。它会继续什么都不做,直到你要求它给出最终答案。[...]

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

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


Ani*_*ain 6

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