分割槽
分割槽數對於應用程式的效能和/或成功終止至關重要。
彈性分散式資料集(RDD)是 Spark 的主要抽象。RDD 被拆分為分割槽,這意味著分割槽是資料集的一部分,是它的一部分,或者換句話說,是它的一部分。
分割槽數越大,每個分割槽的大小越小。
但是,請注意,大量分割槽會對 Hadoop 分散式檔案系統(HDFS)造成很大壓力,而 HDFS 必須保留大量後設資料。
分割槽數與記憶體使用量有關,memoryOverhead 問題可能與此數字( 個人體驗 )有關。
一個常見的錯誤為新使用者是他們的 RDD 轉變成一個 RDD 只有一個分割槽,通常看起來像這樣:
data = sc.textFile(file)
data = data.coalesce(1)
這通常是一個非常糟糕的主意,因為你告訴 Spark 將所有資料放在一個分割槽! 請記住:
Spark 中的一個階段將一次在一個分割槽上執行(並將該分割槽中的資料載入到記憶體中)。
因此,你告訴 Spark 一次處理所有資料,這通常會導致與記憶體相關的錯誤(例如記憶體不足),甚至是空指標異常。
因此,除非你知道自己在做什麼,否則請避免在一個分割槽中重新分割槽 RDD!