是否可以在 Azure Databricks 上使用 pandas?

Databricks Runtime 将 pandas 包含为一个标准的 Python 包,使你可以在 Databricks 笔记本和作业中创建和利用 pandas 数据帧。

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

Apache Spark 以 pandas 函数 API 的形式包含 Arrow 优化的 Python 逻辑执行,使用户能够将 pandas 转换直接应用于 PySpark 数据帧。 Apache Spark 还支持 pandas UDF。UDF 对 Python 中定义的任意用户函数使用类似的 Arrow 优化。

pandas 将数据存储在 Azure Databricks 上的哪个位置?

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

注意

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

如果你在启用了 Unity Catalog 的工作区中,则可以访问使用外部位置的云存储。 请参阅创建外部位置以将云存储连接到 Azure Databricks

为了能够快速探索,对于不包含敏感信息的数据,可以使用相对路径或 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")

可以使用 %fs magic 命令浏览写入到 DBFS 的文件,如以下示例所示。 请注意,/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 数据帧,然后将其转换为 pandas 数据帧

如果使用 DBFS 或相对路径保存了数据文件,则可以使用 DBFS 或相对路径重新加载这些数据文件。 以下代码提供了一个示例:

import pandas as pd

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

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

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