Spark(四)为什么说RDD的惰性计算(lazy)有道理

来源:《Spark快速大数据分析》

例子1,读取文件:

>>> lines = sc.textFile("README.md")

例子2,过滤数据:

>>> pythonLines = lines.filter(lambda line: "Python" in line)

例子3:调用first()行动操作

>>> pythonLines.first()
u'## Interactive Python Shell'

虽然你可以在任何时候定义新的RDD,但是Spark只会惰性计算这个RDD。它们只有第一次在一个行动操作中用到时,才会真正计算。这种策略刚开始看起来可能会显得有些奇怪,不过在大数据领域时很有道理的。比如,看看例子2和例子3,我们以一个文本文件定义了数据,然后把其中包含Python的行筛选出来。如果Spark在我们运行lines = sc.textFile(...)时就把文件中的所有的行都读取并存储起来,就会消耗很多存储空间,而我们马上就要筛选掉其中的很多数据。相反,一旦Spark了解了完整的转化操作链之后,它就可以只计算求结果时真正需要的数据。事实上,在行动操作first()中,Spark只需要扫描文件直到找到第一个匹配的行为为止,而不需要读取整个文件。

posted @ 2021-06-29 14:32  ralgo  阅读(535)  评论(0)    收藏  举报