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 Storage。
如果你在启用了 Unity Catalog 的工作区中,则可以通过外部位置访问云存储。 请参阅 外部位置概述。
为了能够快速探索,对于不包含敏感信息的数据,可以使用相对路径或 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 加载数据。 需要提供云凭据来访问云数据。 还必须安装 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
}
)