使用azure-storage-blob 12.12.0写入DataFrame至Azure Blob报错排查
代码错误说明
代码存在两处核心问题,直接触发初始化报错、无法完成写入:
BlobClient构造参数传递错误:该类初始化仅接收存储端点、容器名、Blob名、身份凭证等连接配置参数,不存在account_key这个入参,账号密钥需要传给credential参数;同时待上传数据不属于初始化参数,上传动作需要调用实例的upload_blob方法完成。将存储CSV内容的output变量作为位置参数传入构造函数,会直接触发参数不匹配错误。- 上传内容类型不符合SDK要求:
df.to_csv()默认返回字符串类型,azure-storage-blob 12.x版本上传接口要求传入字节类型数据,即便修正初始化逻辑,直接传入字符串也会触发类型错误,需要提前转换为UTF-8编码的字节流。
适配azure-storage-blob==12.12.0的可运行代码
from azure.storage.blob import BlobClient import pandas as pd # 构造测试DataFrame head = ["col1" , "col2" , "col3"] l = [[1 , 2 , 3],[4,5,6] , [8 , 7 , 9]] df = pd.DataFrame(l, columns=head) # 将DataFrame转为CSV格式字节流,适配SDK上传要求 csv_data = df.to_csv(index_label="idx", encoding="utf-8").encode("utf-8") # 配置存储账号信息 account_url = "https://<你的存储账号名>.blob.core.windows.net/" account_key = "<你的存储账号访问密钥>" container_name = "mycontainer" blob_name = "test3.csv" # 正确初始化BlobClient blob_client = BlobClient( account_url=account_url, container_name=container_name, blob_name=blob_name, credential=account_key ) # 调用上传方法完成写入,overwrite=True表示允许覆盖同名Blob blob_client.upload_blob(csv_data, overwrite=True)
注意:如果Databricks环境已经通过集群配置、存储挂载等方式完成了对应Blob存储的身份授权,可以省略
credential参数,不需要硬编码存储账号密钥。如果需要上传parquet、json等其他格式,只需要将DataFrame序列化为对应格式的字节流传入upload_blob即可,逻辑完全一致。
内容的提问来源于stack exchange,提问作者Gonza
相关产品推荐
相关产品推荐

