Spark Transformations
被懒惰地评估 - 当我们调用该动作时,它会根据沿袭图执行所有变换。
对Lazilyy转换进行评估有什么好处?
与热切评估相比,它会改善performance
和memory consumption
的数量吗?
对转换进行懒惰评估是否有任何不利之处?
答案 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操作一组数据,它会听你要求它做什么,写下一些简写,以便它不会忘记,然后绝对没有。它会继续无所作为,直到你问它最后的答案。 [...]
它会一直等到你给它操作员完成,并且只有当你要求它给你最终答案时它才会评估,并且它总是看起来要限制它必须做多少工作。
节省了时间和不必要的处理能力。