如何在Azure Synapse Studio中通过PySpark获取Azure存储账户的文件全路径
Azure Synapse PySpark环境访问存储账户PDF及获取路径方法
路径格式说明
本地环境使用磁盘盘符开头的本地路径,Azure存储账户的文件统一使用abfss协议路径,格式如下:
abfss://<容器名称>@<存储账户名称>.dfs.core.windows.net/<文件夹层级>/<文件名.pdf>
举个实际示例:容器名为pdf-files,存储账户名为companydatastorage,PDF存放在2024/业务报表目录下的季度报告.pdf,完整路径为:abfss://pdf-files@companydatastorage.dfs.core.windows.net/2024/业务报表/季度报告.pdf
存储账户授权配置
访问存储账户前需要完成权限配置,常用两种方式:
- 托管身份授权(推荐):提前给Synapse工作区的托管身份分配对应存储容器的「存储Blob数据参与者」权限,无需在代码中配置密钥,直接使用abfss路径即可访问。
- SAS令牌授权:生成存储账户/对应容器的SAS令牌,在代码中添加如下配置即可访问:
storage_account = "替换为你的存储账户名" sas_token = "替换为你的SAS令牌" spark.conf.set(f"fs.azure.account.key.{storage_account}.dfs.core.windows.net", sas_token)
获取PDF文件路径
单个文件路径
直接按照上述abfss格式拼接得到完整路径即可,可直接传入PySpark读取方法使用:
# 读取单个PDF的二进制内容 single_pdf_path = "abfss://pdf-files@companydatastorage.dfs.core.windows.net/2024/业务报表/季度报告.pdf" pdf_data = spark.read.format("binaryFile").load(single_pdf_path)
批量获取目录下所有PDF路径
使用Synapse自带的dbutils工具遍历目录,直接获取所有PDF的完整abfss路径:
pdf_folder = "abfss://pdf-files@companydatastorage.dfs.core.windows.net/2024/业务报表/" # 遍历目录筛选所有PDF文件 all_pdf_paths = [file.path for file in dbutils.fs.ls(pdf_folder) if file.name.endswith(".pdf")] # 打印所有PDF路径验证 for path in all_pdf_paths: print(path)
注意:如果你需要使用PyPDF2、pdfplumber等第三方Python库处理PDF,需要先将存储中的PDF拉取到Synapse节点的本地临时目录,再使用本地路径处理,示例如下:
# 从存储复制PDF到本地临时目录 remote_pdf_path = "abfss://pdf-files@companydatastorage.dfs.core.windows.net/2024/业务报表/季度报告.pdf" local_temp_path = "/tmp/temp_report.pdf" dbutils.fs.cp(remote_pdf_path, f"file:{local_temp_path}") # 调用第三方库处理 import PyPDF2 reader = PyPDF2.PdfReader(local_temp_path)
内容的提问来源于stack exchange,提问作者Ashwin Sarath
相关产品推荐
相关产品推荐

