![](/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.