在 Azure Databricks 的 PySpark
Azure Databricks 建置在 Apache Spark 之上,這是巨量數據和機器學習的整合分析引擎。 PySpark 可協助您使用 Python 程式設計語言與 Apache Spark 進行介面,這是一種容易學習、實作和維護的彈性語言。 它也提供 Databricks 中數據視覺效果的許多選項。 PySpark 結合了 Python 和 Apache Spark 的強大功能。
本文提供 Databricks 上 PySpark 基本概念的概觀。
Spark 概念簡介
請務必先瞭解重要的 Apache Spark 概念,再深入探索使用 PySpark。
DataFrames
DataFrame 是 Apache Spark 中的主要物件。 DataFrame 是組織成名為 columns的數據集。 您可以將數據框架想像成電子表格或 SQL table、一系列記錄的二維標記數據結構(類似於 table中的數據列),以及不同類型的 columns。 DataFrame 提供豐富的函式 set(例如,selectcolumns、篩選、join和匯總),可讓您有效率地執行一般數據操作和分析工作。
一些重要的 DataFrame 元素包括:
- Schema:schema 會定義 DataFrame 的 column 名稱和類型。 數據格式對於 schema 定義和強制執行有不同的語意。 某些數據源會提供 schema 資訊,而其他數據源則依賴手動 schema 定義或允許 schema 推斷。 用戶可以手動定義架構,也可以從數據源讀取架構。
-
數據列:Spark 以物件表示 DataFrame
Row
中的記錄。 雖然像是 Delta Lake 這樣的基礎資料格式使用 columns 來存儲資料,但為了優化,Spark 使用行來進行快取和洗牌操作。 -
Columns:Spark 中的 Columns 類似於試算表中的 columns,也可以表示簡單類型,例如字串或整數,但也可以表示像是陣列、對應或 null 等複雜類型。 您可以撰寫查詢,以操作 select或從數據源 removecolumns。 可能的數據源包括 tables、views、檔案或其他 DataFrame。
Columns 永遠不會從數據集或 DataFrame 中移除,它們只是透過在
select
語句中的.drop
轉換或遺漏被從結果中省略。
資料處理
Apache Spark 會使用延遲評估來處理使用 DataFrame 定義的轉換和動作。 這些概念對於瞭解使用Spark的數據處理至關重要。
轉換:在Spark中,您會將處理邏輯表示為轉換,這些是使用DataFrame載入和操作資料的指示。 常見的轉換包括讀取數據、聯結、匯總和型別轉換。 如需 Azure Databricks 中轉換的相關信息,請參閱 轉換數據。
延遲評估:Spark 會識別最有效率的實體計劃來評估轉換所指定的邏輯,藉此優化數據處理。 不過,在呼叫動作之前,Spark 不會對轉換採取行動。 Spark 不會以指定的確切順序評估每個轉換,而是等到動作觸發所有轉換的計算為止。 這稱為延遲評估或延遲載入,這可讓您 鏈結 多個作業,因為Spark會以延後的方式處理其執行,而不是在定義它們時立即執行它們。
注意
延遲評估表示 DataFrame 會將邏輯查詢儲存為針對數據源的指令 set,而不是記憶體內部結果。 這與急切執行大不相同,這是 pandas DataFrames 所使用的模型。
動作:動作會指示Spark從一或多個DataFrame上的一系列轉換計算結果。 動作作業會傳回值,而且可以是下列任一項:
- 在主控台或編輯器中輸出資料的動作,例如
display
或show
- 收集資料的動作(傳
Row
回物件),例如take(n)
、 和first
或head
- 寫入數據源的動作,例如
saveAsTable
- 觸發計算的匯總,例如
count
重要
在生產數據管線中,寫入數據通常是唯一應該存在的動作。 所有其他動作都會中斷查詢優化,並可能導致瓶頸。
數據框架不可變是什麼意思?
DataFrame 是針對一或多個數據源定義的轉換和動作集合,但最終 Apache Spark 會將查詢解析回原始數據源,因此數據本身不會變更,而且不會變更任何 DataFrame。 換句話說,DataFrame 是不可變的。 因此,在執行轉換之後,傳回新的 DataFrame,必須儲存至變數,才能在後續作業中存取它。 如果您想要評估轉換的中繼步驟,請呼叫動作。
API 和連結庫
與 Spark 的所有 API 一樣,PySpark 隨附許多可啟用和支援強大功能的 API 和連結庫,包括:
- 使用 Spark SQL 和 DataFrame 處理具有 關係型查詢的結構化數據。 Spark SQL 可讓您混合 SQL 查詢與 Spark 程式。 使用 Spark DataFrame,您可以使用 Python 和 SQL 有效率地讀取、寫入、轉換和分析數據,這表示您一律會利用 Spark 的完整功能。 請參閱 PySpark 用戶入門。
- 使用 結構化串流進行可調整的數據流處理。 您可以以對靜態數據表示批次計算的方式表示串流計算,而Spark SQL引擎會以累加方式執行串流計算,並在串流數據繼續送達時持續執行。 請參閱 結構化串流概觀。
- Pandas 數據結構和數據分析工具,可在 Spark 上使用 Pandas API 在 Apache Spark 上運作。 Spark 上的 Pandas API 可讓您將 Pandas 工作負載調整為任何大小,方法是將其分散到多個節點,以及搭配使用 pandas 的單一程式代碼基底(測試、較小的數據集)和 Spark(生產、分散式數據集)。 請參閱 Spark 上的 Pandas API 概觀。
- 具有 機器學習 (MLLib) 的機器學習演算法。 MLlib 是建置在 Spark 上的可調整機器學習連結庫,可提供統一的 API set,可協助使用者建立和調整實用的機器學習管線。 請參閱 機器學習 連結庫概觀。
- 使用 GraphX 的圖形和圖形平行計算。 GraphX 引進新的有向多圖形,並附加至每個頂點和邊緣的屬性,並公開圖形計算運算符、演算法和產生器,以簡化圖形分析工作。 請參閱 GraphX 概觀。
Spark 教學課程
如需 Databricks 上的 PySpark 使用範例,請參閱下列文章:
Apache Spark 檔也有學習 Spark 的快速入門和指南,包括下列各項:
PySpark 參考
Azure Databricks 會維護自己的 PySpark API 版本和對應的參考,您可以在下列各節中找到: