Spark Transformation - 为啥它是懒惰的,有啥优势?
Posted
技术标签:
【中文标题】Spark Transformation - 为啥它是懒惰的,有啥优势?【英文标题】:Spark Transformation - Why is it lazy and what is the advantage?Spark Transformation - 为什么它是懒惰的,有什么优势? 【发布时间】:2016-10-27 22:16:21 【问题描述】:Spark Transformations
被延迟评估 - 当我们调用该操作时,它会根据沿袭图执行所有转换。
懒惰地评估转换有什么好处?
与热切评估相比,它会改善performance
并减少memory consumption
的数量吗?
懒惰地评估转换有什么缺点吗?
【问题讨论】:
【参考方案1】:对于转换,Spark 将它们添加到计算的 DAG 中,并且只有当驱动程序请求一些数据时,该 DAG 才会真正执行。
这样做的一个好处是,Spark 可以在有机会全面查看 DAG 后做出许多优化决策。如果它一得到它就执行一切,这是不可能的。
例如——如果你急切地执行每一个转换,那意味着什么?嗯,这意味着你必须在内存中实现那么多中间数据集。这显然效率不高——一方面,它会增加你的 GC 成本。 (因为你真的对这些中间结果不感兴趣。这些只是你在编写程序时方便的抽象。)所以,你要做的是——你告诉 Spark 你感兴趣的最终答案是什么,并且它找出了到达那里的最佳方式。
【讨论】:
【参考方案2】:考虑一个 1 GB 的日志文件,其中包含错误、警告和信息消息,并且它在 HDFS 中以 64 或 128 MB 的块形式存在(在这种情况下无关紧要)。首先创建一个名为“输入”的 RDD这个文本文件的。然后,通过在“输入”RDD 上应用过滤器来创建另一个名为“错误”的 RDD,以仅获取包含错误消息的行,然后在“错误”RDD 上调用操作 first()。 Spark 将在此处优化日志文件的处理,方法是在任何分区中发现第一次出现错误消息时立即停止。如果在急切评估中重复相同的场景,即使您只对第一条错误消息感兴趣,Spark 也会过滤日志文件的所有分区。
【讨论】:
【参考方案3】:来自https://www.mapr.com/blog/5-minute-guide-understanding-significance-apache-spark
惰性求值意味着,如果你告诉 Spark 对一组数据进行操作,它会听你要求它做什么,为它写一些简写,这样它就不会忘记,然后什么也不做。它会继续什么都不做,直到你问它最后的答案。 [...]
它会一直等到你给它操作符,只有当你要求它给你最终答案时它才会评估,它总是看起来限制它必须做的工作量。
它可以节省时间和不需要的处理能力。
【讨论】:
以上是关于Spark Transformation - 为啥它是懒惰的,有啥优势?的主要内容,如果未能解决你的问题,请参考以下文章
Spark学习之路 Spark Transformation和Action[转]