Spark Transformations是延迟求值的--当我们调用该操作时,它会执行基于谱系图的所有转换。懒惰地评估转换有什么好处?与急切评估相比,它是否会改善performance和减少memory consumption的数量?延迟评估变形有什么缺点吗?
Spark Transformations
performance
memory consumption
kx5bkwkv1#
对于转换,Spark将它们添加到计算的DAG中,并且只有当驱动程序请求一些数据时,该DAG才会实际执行。这样做的一个好处是,Spark可以在有机会查看整个DAG之后做出许多优化决策,如果它一得到DAG就立即执行所有操作,这是不可能的。例如--如果你急切地执行每一个转换,这意味着什么?嗯,这意味着你将不得不在内存中具体化那么多的中间数据集。这显然是没有效率的--首先,它将增加你的GC成本。(因为你对这些中间结果本身并不感兴趣。这些只是你在写程序时方便的抽象。)所以,你要做的是--你告诉Spark你感兴趣的最终答案是什么,它会找出最好的方法。
j0pj023g2#
假设有一个1 GB的日志文件,其中包含错误、警告和信息消息,并且该文件在HDFS中以64或128 MB的数据块形式存在首先创建一个名为“input”的文本文件RDD,然后您创建了另一个称为“errors”的RDD,方法是在“input”RDD上应用过滤器,只获取包含错误消息的行,然后首先调用操作Spark会在任何一个分区中发现第一个错误信息时停止对日志文件的处理,从而优化对日志文件的处理。如果同样的场景在快速评估中重复出现,Spark会过滤掉日志文件的所有分区,即使你只对第一个错误信息感兴趣。
bxjv4tth3#
从https://www.mapr.com/blog/5-minute-guide-understanding-significance-apache-spark开始懒惰求值意味着,如果你让Spark对一组数据进行操作,它会听你的要求,写下一些速记,这样它就不会忘记,然后什么也不做,直到你问它最后的答案。它会一直等到你给它提供完运算符,只有当你要求它给予最终答案时,它才会进行计算,而且它总是限制它要做的工作量。它节省了时间和不必要的处理能力。
5vf7fwbs4#
思考Spark何时不懒惰...例如:我们正在将1 GB文件从HDFS加载到内存中,我们正在进行如下转换
rdd1 = load file from HDFS rdd1.println(line1)
在这种情况下,当执行第一行时,将向DAG创建条目,并将1GB文件加载到内存中。在第二行中,灾难在于,仅打印文件的第一行,就将整个1GB文件加载到内存中。考虑Spark何时懒惰
在这种情况下,执行第一行,并在DAG中创建一个条目,然后构建整个执行计划。Spark执行内部优化。不加载整个1GB文件,只加载和打印文件的第一行。这有助于避免过多的计算,并为优化留出空间。
4条答案
按热度按时间kx5bkwkv1#
对于转换,Spark将它们添加到计算的DAG中,并且只有当驱动程序请求一些数据时,该DAG才会实际执行。
这样做的一个好处是,Spark可以在有机会查看整个DAG之后做出许多优化决策,如果它一得到DAG就立即执行所有操作,这是不可能的。
例如--如果你急切地执行每一个转换,这意味着什么?嗯,这意味着你将不得不在内存中具体化那么多的中间数据集。这显然是没有效率的--首先,它将增加你的GC成本。(因为你对这些中间结果本身并不感兴趣。这些只是你在写程序时方便的抽象。)所以,你要做的是--你告诉Spark你感兴趣的最终答案是什么,它会找出最好的方法。
j0pj023g2#
假设有一个1 GB的日志文件,其中包含错误、警告和信息消息,并且该文件在HDFS中以64或128 MB的数据块形式存在首先创建一个名为“input”的文本文件RDD,然后您创建了另一个称为“errors”的RDD,方法是在“input”RDD上应用过滤器,只获取包含错误消息的行,然后首先调用操作Spark会在任何一个分区中发现第一个错误信息时停止对日志文件的处理,从而优化对日志文件的处理。如果同样的场景在快速评估中重复出现,Spark会过滤掉日志文件的所有分区,即使你只对第一个错误信息感兴趣。
bxjv4tth3#
从https://www.mapr.com/blog/5-minute-guide-understanding-significance-apache-spark开始
懒惰求值意味着,如果你让Spark对一组数据进行操作,它会听你的要求,写下一些速记,这样它就不会忘记,然后什么也不做,直到你问它最后的答案。
它会一直等到你给它提供完运算符,只有当你要求它给予最终答案时,它才会进行计算,而且它总是限制它要做的工作量。
它节省了时间和不必要的处理能力。
5vf7fwbs4#
思考Spark何时不懒惰...
例如:我们正在将1 GB文件从HDFS加载到内存中,我们正在进行如下转换
在这种情况下,当执行第一行时,将向DAG创建条目,并将1GB文件加载到内存中。在第二行中,灾难在于,仅打印文件的第一行,就将整个1GB文件加载到内存中。
考虑Spark何时懒惰
在这种情况下,执行第一行,并在DAG中创建一个条目,然后构建整个执行计划。Spark执行内部优化。不加载整个1GB文件,只加载和打印文件的第一行。
这有助于避免过多的计算,并为优化留出空间。