![](/img/trans.png)
[英]In Apache Spark, how to make an RDD/DataFrame operation lazy?
[英]Is .parallelize(…) a lazy operation in Apache Spark?
并行化(和其他加载操作)是仅在执行Spark操作时执行还是在遇到它时立即执行?
请参阅Spark 代码中的 def parallelize
请注意.textFile(...)的不同后果:延迟评估意味着虽然最初可能会保存一些内存,但每次执行操作时都必须读取文本文件,并且文本文件中的更改会影响改变后的所有行动。
parallelize
执行是懒惰的:请参阅引用代码的L726,说明“@note Parallelize懒惰地行动”。
只有在您调用操作(例如collect
或count
)时才会触发Spark中的执行。
因此与Spark一起:
...(和其他加载操作)
parallelize
是懒惰的(正如Martin Senne和Chandan所说),与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.