Apache Spark 是分散式處理引擎,專為大規模處理結構化、半結構化和非結構化資料而設計。開發人員可使用 Spark API 與引擎互動,並定義分散式資料作業。
現代 Spark 開發的核心是 Spark DataFrame API。DataFrame 會將分散式資料整理及處理成資料欄並設定名稱,類似關聯式資料庫中的資料表或試算表。提供結構化的宣告式介面,可分析龐大資料集,同時在幕後自動最佳化實體執行作業。
如要瞭解 Spark API 如何在分散式網路中執行程式碼,請務必瞭解其執行階段架構的基本元件:
設計分散式資料管道時,開發人員可選擇兩種主要的程式設計介面:
幾乎所有資料工程和資料科學用途,都適合使用 DataFrame API。彈性分散式資料集 (RDD) 僅適用於必須使用自訂 Java 物件,來操控原始非結構化資料 (例如二進位檔案或媒體串流) 的情況。DataFrame 需要的程式碼較少、自動執行速度更快,並利用堆積外二進位檔記憶體管理,略過 JVM 垃圾回收瓶頸。
Spark DataFrame API 可簡化需要密集運算的任務,例如處理、清理及準備大量資料。
Spark DataFrame API 是 Spark 進階處理程式庫的程式設計基礎:
宣告式方法最佳化
DataFrame 使用內建的查詢最佳化器,稱為 Catalyst 最佳化器。編寫 DataFrame 程式碼時,最佳化器會自動重寫實體執行計畫,套用篩選器下推、投影剪枝和 join 重新排序,盡可能加快執行速度,無需手動調整。
語言彈性
無論團隊使用 Python (PySpark)、Scala、Java 或 R 編寫程式碼,DataFrame API 都能確保效能一致。基礎執行計畫會在同一個獨立於 JVM 的執行層中編譯及最佳化。
有效率的記憶體管理
DataFrame 採用 Tungsten 執行引擎,以高度壓縮的堆積外二進位檔格式儲存資料。這可消除 JVM 物件建立負擔,並防止因凍結執行器執行緒而暫停垃圾回收。
傳統上,執行開放原始碼 Spark 需要手動設定叢集、管理軟體版本,以及進行複雜的網路對接。Google Cloud 提供 Managed Service for Apache Spark,將分散式執行環境轉化為全代管、企業級的資料平台,簡化這項作業。
資料團隊可使用下列功能,在 Google Cloud 執行 Spark DataFrame 工作負載: