簡體   English   中英

在 memory 中緩存 Spark dataframe 是否有額外的開銷?

[英]Is there an extra overhead to cache Spark dataframe in memory?

我是 Spark 的新手,想了解在 memory 中是否存在額外的開銷/延遲來持久化和取消持久化 dataframe。

據我目前所知,當我們使用緩存 dataframe 時沒有發生數據移動,它只是保存在執行程序的 memory 上。 所以這應該只是設置/取消設置標志的問題。

我在火花流作業中緩存 dataframe 並想知道這是否會導致批處理執行的額外延遲。

如果在 memory 中持久化和取消持久化 dataframe 存在額外的開銷/延遲。

這取決於。 如果您只將 DataFrame 標記為持久化,則不會發生任何事情,因為它是一個惰性操作。 您必須執行一個操作來觸發 DataFrame 持久性/緩存。 通過您所做的操作,您會增加額外的開銷。

此外,將持久性(緩存)視為一種預先計算數據並將其保存在更靠近執行器(內存、磁盤或它們的組合)的方式。 這種將數據從它所在的位置移動到執行器確實會在執行時增加額外的開銷(即使它只是一點點)。

在內部,Spark 將數據作為塊進行管理(在執行程序上使用 BlockManagers)。 它們是按需交換塊的對等點(使用類似 torrent 的協議)。

取消持久化 DataFrame 只是向 BlockManagers 發送請求(同步或異步)以刪除 RDD 塊。 如果它以異步方式發生,則開銷為零(減去執行者在運行任務時必須做的額外工作)。

所以這應該只是設置/取消設置標志的問題。

從某種意義上說,這就是它在幕后的樣子。 由於 DataFrame 或 RDD 只是描述分布式計算的抽象,並且在創建時什么都不做,所以這個持久化/非持久化只是設置/取消設置一個標志。

可以在執行時注意到更改。

我在火花流作業中緩存 dataframe 並想知道這是否會導致批處理執行的額外延遲。

如果你使用異步緩存(默認),應該會有一個非常小的延遲。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM