您可以在 Azure Databricks 上使用 Pandas 嗎?

Databricks Runtime 包含 pandas 作為其中一個標準 Python 套件,可讓您在 Databricks 筆記本和作業中建立及運用 Pandas DataFrames。

在 Databricks Runtime 10.4 LTS 和更新版本中, Spark 上的 Pandas API 會在 PySpark DataFrame 上提供熟悉的 pandas 命令。 您也可以在 Pandas 與 PySpark 之間轉換 DataFrame

Apache Spark 包含以 pandas 函式 API 形式進行 Python 邏輯的箭頭優化執行,可讓使用者將 pandas 轉換直接套用至 PySpark DataFrame。 Apache Spark 也支援 pandas UDF,其針對 Python 中定義的任意使用者函式使用類似的箭頭優化。

Pandas 會在 Azure Databricks 上儲存資料的位置?

您可以使用 pandas 將資料儲存在 Azure Databricks 上許多不同的位置。 您可以從某些位置儲存和載入資料的能力取決於工作區系統管理員所設定的組態。

注意

Databricks 建議將生產數據儲存在雲端物件記憶體上。 請參閱 連線到Google Cloud Storage

如需快速探索和沒有敏感性信息的數據,您可以使用相對路徑或 DBFS 安全地儲存數據,如下列範例所示:

import pandas as pd

df = pd.DataFrame([["a", 1], ["b", 2], ["c", 3]])

df.to_csv("./relative_path_test.csv")
df.to_csv("/dbfs/dbfs_test.csv")

您可以使用 magic 命令探索寫入 DBFS 的 %fs 檔案,如下列範例所示。 請注意,目錄 /dbfs 是這些命令的根路徑。

%fs ls

當您儲存至相對路徑時,檔案的位置取決於您執行程序代碼的位置。 如果您使用 Databricks 筆記本,數據檔會儲存至連結至叢集驅動程式的磁碟區記憶體。 當叢集終止時,會永久刪除儲存在此位置的數據。 如果您使用 已啟用任意檔案支援的 Databricks Git 資料夾 ,您的資料會儲存到您目前專案的根目錄。 不論是哪一種情況,您都可以探索使用 %sh magic命令撰寫的檔案,以允許相對於您目前根目錄的簡單Bash作業,如下列範例所示:

%sh ls

如需 Azure Databricks 如何儲存各種檔案的詳細資訊,請參閱 使用 Azure Databricks 上的檔案。

如何在 Azure Databricks 上使用 Pandas 載入資料?

Azure Databricks 提供數個選項,可協助將數據上傳至工作區以進行探索。 使用 pandas 載入資料的慣用方法會因將數據載入工作區的方式而有所不同。

如果您的小型數據檔與筆記本一起儲存在本機電腦上,您可以將數據和程式代碼與 Git 資料夾一起上傳。 然後,您可以使用相對路徑來載入資料檔。

Azure Databricks 提供廣泛的 UI 型選項來載入數據。 這些選項大多會將您的數據儲存為 Delta 資料表。 您可以將 Delta 數據表讀取至 Spark DataFrame,然後將該數據表轉換成 pandas DataFrame。

如果您已使用 DBFS 或相對路徑儲存資料檔,您可以使用 DBFS 或相對路徑來重載這些資料檔。 下列程式碼提供一個範例:

import pandas as pd

df = pd.read_csv("./relative_path_test.csv")
df = pd.read_csv("/dbfs/dbfs_test.csv")

Databricks 建議將生產數據儲存在雲端物件記憶體上。 請參閱 連線到 Azure Data Lake Storage Gen2 和 Blob 記憶體

如果您位於已啟用 Unity 目錄的工作區中,您可以使用外部位置存取雲端記憶體。 請參閱 建立外部位置以將雲端記憶體連線到 Azure Databricks

您可以使用 pandas 和完整 URL,直接從 Azure Data Lake Storage Gen2 載入數據。 您必須提供雲端認證來存取雲端數據。

df = pd.read_csv(
  f"abfss://{container}@{storage_account}.dfs.core.windows.net/{file_path}",
  storage_options={
    "sas_token": sas_token_value
  }
)