惰性求值的简单介绍

惰性求值意味着当我们对RDD调用转化操作(例如调用filter() )时,操作不会立即执行。Spark会在内部记录下所要执行的操作的相关信息。所以我们这时不应该把RDD看作存放着特定数据的数据集,而要把每个RDD当作我们通过转化操作构建出来的、记录如何计算数据的指令列表。把数据读取到RDD的操作也同样是惰性的。因此,当我们调用sc.textFile(...) 时,数据并没有被读取到内存中,而是要在必要时才会读取,也就是需要真正计算的时候才会把数据读取进来。和转化操作一样的是,读取数据的操作也有可能会多次执行。


虽然转化操作是惰性求值的,但是也可以随时通过运行一个行动操作来强制Spark执行RDD的转化操作,比如使用count() 。这样可以很方便地对所写的程序进行测试。


Spark之所以使用惰性求值,是因为这样可以把一些操作合并到一起来减少计算数据的步骤。在类似Hadoop MapReduce 的系统中,开发者常常花费大量时间考虑如何把操作组合到一起,以减少MapReduce 的周期数。而在Spark 中,写出一个非常复杂的映射并不见得能比使用很多简单的连续操作获得好很多的性能。因此,用户可以用更小的操作来组织他们的程序,这样也使这些操作更容易管理。

你可能感兴趣的:(Spark)