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 是組織成具名數據行的數據集。 您可以將 DataFrame 想像成電子表格或 SQL 數據表、一系列記錄的二維標籤數據結構(類似於資料表中的數據列),以及不同類型的數據行。 DataFrame 提供一組豐富的函式(例如,選取數據行、篩選、聯結和匯總),可讓您有效率地執行一般數據操作和分析工作。

一些重要的 DataFrame 元素包括:

  • 架構:架構會定義 DataFrame 的數據行名稱和類型。 數據格式對於架構定義和強制執行有不同的語意。 某些數據源會提供架構資訊,而其他數據源則依賴手動架構定義或允許架構推斷。 用戶可以手動定義架構,也可以從數據源讀取架構。
  • 數據列:Spark 以物件表示 DataFrame Row 中的記錄。 雖然 Delta Lake 等基礎數據格式會使用數據行來儲存數據,以優化 Spark 快取,並使用數據列來隨機顯示數據。
  • 數據行:Spark 中的數據行類似於電子錶格中的數據行,而且可以代表簡單的類型,例如字串或整數,但也代表數位、對應或 Null 等複雜類型。 您可以撰寫查詢,以選取、操作或移除數據源中的數據行。 可能的數據源包括數據表、檢視、檔案或其他DataFrame。 數據行永遠不會從數據集或 DataFrame 中移除,它們只會透過 .drop 語句中的 select 轉換或遺漏,從結果中省略。

資料處理

Apache Spark 會使用延遲評估來處理使用 DataFrame 定義的轉換和動作。 這些概念對於瞭解使用Spark的數據處理至關重要。

轉換:在Spark中,您會將處理邏輯表示為轉換,這些是使用DataFrame載入和操作資料的指示。 常見的轉換包括讀取數據、聯結、匯總和型別轉換。 如需 Azure Databricks 中轉換的相關信息,請參閱 轉換數據

延遲評估:Spark 會識別最有效率的實體計劃來評估轉換所指定的邏輯,藉此優化數據處理。 不過,在呼叫動作之前,Spark 不會對轉換採取行動。 Spark 不會以指定的確切順序評估每個轉換,而是等到動作觸發所有轉換的計算為止。 這稱為延遲評估或延遲載入,這可讓您 鏈結 多個作業,因為Spark會以延後的方式處理其執行,而不是在定義它們時立即執行它們。

注意

延遲評估表示 DataFrame 會將邏輯查詢儲存為針對數據源的一組指示,而不是記憶體內部結果。 這與急切執行大不相同,這是 pandas DataFrames 所使用的模型。

動作:動作會指示Spark從一或多個DataFrame上的一系列轉換計算結果。 動作作業會傳回值,而且可以是下列任一項:

  • 在主控台或編輯器中輸出資料的動作,例如 displayshow
  • 收集資料的動作(傳 Row 回物件),例如 take(n)、 和 firsthead
  • 寫入數據源的動作,例如 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,可協助使用者建立和調整實用的機器學習管線。 請參閱 機器學習 連結庫概觀
  • 使用 GraphX 的圖形和圖形平行計算。 GraphX 引進新的有向多圖形,並附加至每個頂點和邊緣的屬性,並公開圖形計算運算符、演算法和產生器,以簡化圖形分析工作。 請參閱 GraphX 概觀

Spark 教學課程

如需 Databricks 上的 PySpark 使用範例,請參閱下列文章:

Apache Spark 檔也有學習 Spark 的快速入門和指南,包括下列各項:

PySpark 參考

Azure Databricks 會維護自己的 PySpark API 版本和對應的參考,您可以在下列各節中找到: