共用方式為


在 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上的一系列轉換計算結果。 動作作業會傳回值,而且可以是下列任一項:

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

Spark 教學課程

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

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

PySpark 參考

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