簡體   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