就像我在评论部分所说的那样,
Spark中的所有转换都是 惰性的
,因为它们不会立即计算出结果。相反,他们只记得应用于某些基本数据集(例如文件)的转换。仅当 *** 作要求将结果返回给驱动程序时才计算转换。这种设计使Spark可以更高效地运行-
例如,我们可以认识到通过map创建的数据集将用于reduce中,并且仅将reduce的结果返回给驱动程序,而不是将较大的maped数据集返回给驱动程序。
没有其他办法了。
为什么懒呢?
函数式编程的惰性评估优点:
- 通过避免不必要的计算以及评估复合表达式时出现的错误情况来提高性能
- 构造潜在的无限数据结构的能力
- 将控制结构定义为抽象而不是基元的能力
注意: 大多数新的函数式编程语言都是惰性的(例如Haskell,Scala)。即使以为您使用的是Python,Spark还是用Scala编写的。
但是,如果要在每次RDD定义后计算RDD,则可以
count根据需要在缓存后执行 *** 作,但这样做没有目的。您最终将在需要时获得RDD。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)