Spark改造-为什么是懒惰,有什么好处?

juzqafwq  于 2022-11-25  发布在  Apache
关注(0)|答案(4)|浏览(111)

Spark Transformations是延迟求值的--当我们调用该操作时,它会执行基于谱系图的所有转换。
懒惰地评估转换有什么好处?
与急切评估相比,它是否会改善performance和减少memory consumption的数量?
延迟评估变形有什么缺点吗?

kx5bkwkv

kx5bkwkv1#

对于转换,Spark将它们添加到计算的DAG中,并且只有当驱动程序请求一些数据时,该DAG才会实际执行。
这样做的一个好处是,Spark可以在有机会查看整个DAG之后做出许多优化决策,如果它一得到DAG就立即执行所有操作,这是不可能的。
例如--如果你急切地执行每一个转换,这意味着什么?嗯,这意味着你将不得不在内存中具体化那么多的中间数据集。这显然是没有效率的--首先,它将增加你的GC成本。(因为你对这些中间结果本身并不感兴趣。这些只是你在写程序时方便的抽象。)所以,你要做的是--你告诉Spark你感兴趣的最终答案是什么,它会找出最好的方法。

j0pj023g

j0pj023g2#

假设有一个1 GB的日志文件,其中包含错误、警告和信息消息,并且该文件在HDFS中以64或128 MB的数据块形式存在首先创建一个名为“input”的文本文件RDD,然后您创建了另一个称为“errors”的RDD,方法是在“input”RDD上应用过滤器,只获取包含错误消息的行,然后首先调用操作Spark会在任何一个分区中发现第一个错误信息时停止对日志文件的处理,从而优化对日志文件的处理。如果同样的场景在快速评估中重复出现,Spark会过滤掉日志文件的所有分区,即使你只对第一个错误信息感兴趣。

bxjv4tth

bxjv4tth3#

https://www.mapr.com/blog/5-minute-guide-understanding-significance-apache-spark开始
懒惰求值意味着,如果你让Spark对一组数据进行操作,它会听你的要求,写下一些速记,这样它就不会忘记,然后什么也不做,直到你问它最后的答案。
它会一直等到你给它提供完运算符,只有当你要求它给予最终答案时,它才会进行计算,而且它总是限制它要做的工作量。
它节省了时间和不必要的处理能力。

5vf7fwbs

5vf7fwbs4#

思考Spark何时不懒惰...
例如:我们正在将1 GB文件从HDFS加载到内存中,我们正在进行如下转换

rdd1 = load file from HDFS
rdd1.println(line1)

在这种情况下,当执行第一行时,将向DAG创建条目,并将1GB文件加载到内存中。在第二行中,灾难在于,仅打印文件的第一行,就将整个1GB文件加载到内存中。
考虑Spark何时懒惰

rdd1 = load file from HDFS
rdd1.println(line1)

在这种情况下,执行第一行,并在DAG中创建一个条目,然后构建整个执行计划。Spark执行内部优化。不加载整个1GB文件,只加载和打印文件的第一行。
这有助于避免过多的计算,并为优化留出空间。

相关问题