可以在Azure Databricks上使用pandas吗?

Databricks Runtime 将 pandas 作为标准Python包之一,使你可以在 Databricks 笔记本和作业中创建和使用 pandas DataFrames。

在 Databricks Runtime 10.4 LTS 及以上版本中,Pandas API on Spark 通过 PySpark 数据帧提供用户熟悉的 Pandas 命令。 你还可以在 pandas 与 PySpark 之间转换数据帧。

Apache Spark 通过 pandas 函数 API,使用 Arrow 优化执行 Python 逻辑,使用户可以将 pandas 转换直接应用于 PySpark 数据帧。 Apache Spark 还支持 pandas UDF,后者对Python中定义的任意用户函数使用类似的箭头优化。

Azure Databricks 上,pandas 把数据存储在哪里?

可以使用 pandas 将数据存储在Azure Databricks上许多不同的位置。 能否在某些位置存储和加载数据取决于工作区管理员设置的配置。

注意

Databricks 建议将生产数据存储在云对象存储上。 请参阅 连接到 Azure Data Lake Storage 和 Blob 存储。

如果你在启用了 Unity Catalog 的工作区中,则可以通过外部位置访问云存储。 请参阅 外部位置概述。

对于快速探索以及不包含敏感信息的数据,你可以使用 Unity Catalog 卷或相对路径来保存数据,如以下示例所示。

import pandas as pd

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

df.to_csv("/Volumes/my_catalog/my_schema/my_volume/volume_test.csv")
df.to_csv("./relative_path_test.csv")
df.to_csv("/dbfs/tmp/dbfs_test.csv") # DBFS is deprecated.

你可以使用 %fs 魔法命令查看写入卷中的文件:

%fs ls /Volumes/my_catalog/my_schema/my_volume

注意

如果你使用的计算仍支持DBFS,请注意pandas使用类似POSIX的路径,比如 /dbfs/...,无法直接读取 dbfs:/... 路径。 若要在支持 DBFS FUSE 的计算中使用 pandas 读取 DBFS 文件,请将 dbfs:/ 方案替换为 /dbfs/。

保存到相对路径时,文件位置取决于执行代码的位置。 如果使用 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 数据帧,然后将其转换为 pandas 数据帧。

如果你有使用 Unity 目录卷或相对路径保存的数据文件,可以从同一个位置重新加载这些数据文件。 以下代码提供了一个示例:

import pandas as pd

df = pd.read_csv("/Volumes/my_catalog/my_schema/my_volume/volume_test.csv")
df = pd.read_csv("./relative_path_test.csv")
df = pd.read_csv("/dbfs/tmp/dbfs_test.csv") # DBFS is deprecated.

可以使用 pandas 和完全限定的 URL 直接从 Azure Data Lake Storage 加载数据。 需要提供云凭据来访问云数据。 还必须安装 Python 包 fsspec 和 adlfs。

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