繁体   English   中英

.parallelize(...)在Apache Spark中是一个懒惰的操作吗?

[英]Is .parallelize(…) a lazy operation in Apache Spark?

并行化(和其他加载操作)是仅在执行Spark操作时执行还是在遇到它时立即执行?

请参阅Spark 代码中的 def parallelize

请注意.textFile(...)的不同后果:延迟评估意味着虽然最初可能会保存一些内存,但每次执行操作时都必须读取文本文件,并且文本文件中的更改会影响改变后的所有行动。

parallelize执行是懒惰的:请参阅引用代码的L726,说明“@note Parallelize懒惰地行动”。

只有在您调用操作(例如collectcount )时才会触发Spark中的执行。

因此与Spark一起:

  1. 转换链由用户API(您)设置,例如parallelize,map,reduce,...
  2. 一旦调用了一个动作 ,转换链就会“放入”Catalyst优化器中,进行优化然后执行。

...(和其他加载操作)

parallelize是懒惰的(正如Martin SenneChandan所说),与SparkContext定义的标准数据加载操作(如textFile )相同。

DataFrameReader.load和相关方法通常只是部分懒惰。 根据上下文,它可能需要元数据访问(JDBC源,Cassandra)或甚至完整数据扫描(带有模式推断的CSV)。

请注意,这里我们刚刚定义了RDD,数据仍未加载。 这意味着如果您去访问此RDD中的数据,它可能会失败。 在RDD中创建数据的计算仅在引用数据时完成; 例如,它是通过缓存或写出RDD创建的。

引用链接

parallelize() ,所有transformations都是懒惰的。

RDD支持两种类型的操作: transformations (从现有数据集创建新数据集)和actions (在数据集上运行计算后将值返回到驱动程序)。

Spark中的所有转换都是惰性的,因为它们不会立即计算结果。 相反,他们只记得应用于某些基础数据集的转换(例如文件)。 The transformations are only computed when an action requires a result to be returned to the driver program

看看这篇文章 ,了解Scala中的所有transformations

有关更多详细信息,请查看此文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM