Azure Databricks 上的 PySpark 工具

Azure Databricks 建置在 Apache Spark 之上,這是巨量數據和機器學習的整合分析引擎。 PySpark 可協助您使用 Python 程式設計語言與 Apache Spark 進行介面,這是一種容易學習、實作和維護的彈性語言。 它也提供 Databricks 中數據視覺效果的許多選項。 PySpark 結合了 Python 和 Apache Spark 的強大功能。

本文提供 Databricks 上 PySpark 基本概念的概觀。

Spark 概念簡介

請務必先瞭解重要的 Apache Spark 概念,再深入探索使用 PySpark。

資料框架

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

一些重要的 DataFrame 元素包括:

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

資料處理

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

轉換:在Spark中,您會將處理邏輯表示為轉換,這些是使用DataFrame載入和操作資料的指示。 常見的轉換包括讀取資料、合併、匯總和類型轉換。

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

注意

延遲評估表示 DataFrame 會將邏輯查詢儲存為針對數據來源的一組指令,而不是內存中的結果。 這種模式與搶先執行截然不同,pandas DataFrames 使用的正是此模型。

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

  • 在主控台或編輯器中輸出資料的動作,例如 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 資料結構和資料分析工具,可以透過 Pandas API on Spark 在 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 參考

PySpark 的參考資料可見於以下章節: