如何在Databricks的Python脚本中读取容器内Excel文件并导入Pandas
解决Databricks读取Excel文件的问题
一、修复Spark读取的ClassNotFoundException错误
错误根源是Spark原生不支持Excel格式,必须安装com.crealytics:spark-excel依赖包。
安装依赖的两种方式
- 集群级安装:进入Databricks集群的「库」页面,点击「安装新库」,类型选「Maven」,填入坐标
com.crealytics:spark-excel_2.12:0.14.0(注意匹配Spark版本,Spark 3.x对应Scala 2.12) - 笔记本临时安装:在笔记本开头执行:
%pip install spark-excel
修正后的读取代码
import pyspark import pandas as pd # 替换为你的实际信息 storage_account_name = "你的存储账户名" storage_account_access_key = "你的存储密钥" filename = "wasbs://容器名@{storage_account_name}.blob.core.windows.net/目标文件路径.xls" # 配置Azure存储访问权限 spark.conf.set(f'fs.azure.account.key.{storage_account_name}.blob.core.windows.net', storage_account_access_key) # 读取Excel并转为Pandas DataFrame spark_df = spark.read.format("com.crealytics.spark.excel") \ .option("header", "true") \ # 若文件含表头则开启 .option("inferSchema", "true") \ # 自动推断列数据类型 .load(filename) pandas_df = spark_df.toPandas()
二、直接用Pandas读取Blob存储文件的方案
若想跳过Spark直接用Pandas读取,需借助Azure存储SDK读取文件流:
步骤1:安装依赖
%pip install azure-storage-blob pandas xlrd openpyxl
- xlrd用于读取
.xls格式,openpyxl用于读取.xlsx格式
步骤2:读取代码示例
from azure.storage.blob import BlobServiceClient import pandas as pd import io # 替换为你的实际信息 storage_account_name = "你的存储账户名" storage_account_access_key = "你的存储密钥" container_name = "你的容器名" blob_file_path = "目标文件路径.xls" # 初始化Blob客户端 blob_service_client = BlobServiceClient( account_url=f"https://{storage_account_name}.blob.core.windows.net", credential=storage_account_access_key ) blob_client = blob_service_client.get_blob_client(container=container_name, blob=blob_file_path) # 读取文件到内存流并转为Pandas DataFrame file_stream = io.BytesIO(blob_client.download_blob().readall()) pandas_df = pd.read_excel(file_stream, engine="xlrd") # 若为.xlsx则替换engine为"openpyxl"
三、关键注意事项
- 权限验证:除了账户密钥,也可使用服务主体、托管身份等更安全的认证方式,避免密钥泄露
- 文件大小:大文件优先用Spark读取后转Pandas,防止单节点内存溢出
- 格式匹配:严格区分
.xls和.xlsx,对应正确的读取引擎
内容的提问来源于stack exchange,提问作者BeHumblez
相关产品推荐
相关产品推荐

