You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Synapse Notebook读取ADLS Gen2中PDF文件失败求助

在Azure Synapse Notebook中读取ADLS Gen2内PDF文件的解决方案

问题背景

  • 运行于虚拟网络内的Azure Synapse,通过私有端点访问ADLS Gen2
  • 读取CSV文件正常,但使用PyPDF2/camelot读取PDF时持续报错,包括FileNotFoundError、OSError: [Errno 5]等
  • 尝试挂载存储后仍无法读取PDF,仅CSV可正常访问

方法1:将PDF下载到本地临时目录后读取

Synapse的Python环境无法直接通过ABFSS路径或挂载路径用本地文件IO读取二进制文件,需先将文件从ADLS下载到Synapse本地临时存储:

import mssparkutils
import PyPDF2

# 定义ADLS上的PDF路径(ABFSS格式)
pdf_abfss_path = "abfss://container@accountname.dfs.core.windows.net/file.pdf"
# 本地临时存储路径
local_temp_path = "/tmp/file.pdf"

# 从ADLS下载文件到本地临时目录
mssparkutils.fs.cp(pdf_abfss_path, f"file:{local_temp_path}", recurse=False)

# 以二进制模式读取本地文件
with open(local_temp_path, 'rb') as f:
    pdf_reader = PyPDF2.PdfReader(f)
    # 验证读取:打印PDF页数
    print(f"PDF页数:{len(pdf_reader.pages)}")

方法2:通过字节流直接读取(无需本地下载)

利用mssparkutils.fs.open获取文件字节流,直接传入PyPDF2处理:

import mssparkutils
import PyPDF2
from io import BytesIO

# 打开ADLS上的PDF文件,获取字节流
with mssparkutils.fs.open("abfss://container@accountname.dfs.core.windows.net/file.pdf", "rb") as fs_stream:
    # 将字节流转换为PyPDF2可识别的格式
    pdf_stream = BytesIO(fs_stream.read())
    pdf_reader = PyPDF2.PdfReader(pdf_stream)
    # 验证操作:提取第一页文本
    first_page_text = pdf_reader.pages[0].extract_text()
    print(first_page_text)

关键说明

  1. 路径访问限制原因
    • Synapse的Python运行时中,open()仅支持本地文件系统,PyPDF2等库不直接兼容ABFSS分布式存储协议
    • Spark层面的挂载路径(如/synfs/mount#/TR/)无法被Python本地IO直接识别为可读取的二进制文件路径
  2. 私有端点环境注意事项
    • 确认Synapse托管虚拟网络已配置ADLS Gen2私有端点的访问权限
    • 检查链接服务是否正确绑定私有端点,无防火墙/NSG规则阻挡流量

内容的提问来源于stack exchange,提问作者Pashket

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 01:17:42