从Databricks Notebook向Azure Blob存储写入PDF文件的问题
用Databricks将网页PDF保存到Azure Blob存储容器指定文件夹的实现方案
完全可以通过Databricks实现这个需求,你当前代码报错[Errno 2] No such file or directory的原因是:Python内置的open()函数仅支持操作本地文件系统或Databricks的DBFS本地路径,无法直接识别Azure Blob存储的wasbs://格式URL。
下面提供两种可行的实现方式:
方式一:使用Azure Blob Storage Python SDK
这是最直接的方式,无需挂载存储,通过SDK直接操作Blob:
- 先安装依赖(在Databricks笔记本中运行):
%pip install azure-storage-blob
- 实现代码:
import requests from azure.storage.blob import BlobServiceClient # 网页PDF地址 testurl = 'https://www.testwebsite.com/test123.pdf' # Blob存储连接字符串(从Azure门户获取) conn_str = "你的Blob存储连接字符串" # 目标容器名称 container_name = "containername" # Blob中的目标路径(包含文件夹和文件名) target_blob_path = "Test Folder/Test.pdf" # 获取PDF内容 response = requests.get(testurl) response.raise_for_status() # 确保请求成功,避免处理无效内容 # 初始化Blob服务客户端 blob_service_client = BlobServiceClient.from_connection_string(conn_str) # 获取容器客户端 container_client = blob_service_client.get_container_client(container_name) # 上传内容到指定路径,overwrite=True表示覆盖已有文件 container_client.upload_blob(name=target_blob_path, data=response.content, overwrite=True)
方式二:挂载Blob存储到DBFS
将Blob容器挂载到Databricks的DBFS后,就可以像操作本地文件一样读写:
- 挂载Blob存储(运行一次即可,挂载状态会保留):
dbutils.fs.mount( source = "wasbs://containername@storage.blob.core.windows.net", mount_point = "/mnt/test_blob_mount", extra_configs = {"fs.azure.account.key.storage.blob.core.windows.net": "你的存储账户访问密钥"} )
- 写入文件的代码:
import requests testurl = 'https://www.testwebsite.com/test123.pdf' response = requests.get(testurl) response.raise_for_status() # 写入挂载后的DBFS路径,对应Blob容器中的Test Folder/Test.pdf with open('/dbfs/mnt/test_blob_mount/Test Folder/Test.pdf', 'wb') as f: f.write(response.content)
注意事项
- 确保Databricks集群拥有访问Azure Blob存储的权限,生产环境建议使用Azure AD身份验证替代密钥/连接字符串,更安全
- 处理大体积PDF时,建议使用分块上传方式,避免内存溢出
- 如果目标文件夹不存在,两种方式都会自动创建,无需提前手动创建
内容的提问来源于stack exchange,提问作者Thiziri
相关产品推荐
相关产品推荐

