Python从Azure Blob读取joblib文件报UnicodeDecodeError如何解决?
错误原因
joblib.load() 入参要求为文件路径字符串或可读二进制类文件对象,你直接传入downloaded_blob.readall()返回的二进制字节串时,joblib会误将该字节串识别为文件路径,尝试按UTF-8编码解析路径字符串,由此触发解码错误。
解决方案
有两种可直接落地的实现方式,和pickle.loads的读取效果完全一致:
- 方案1:将二进制内容包装为
io.BytesIO类文件对象,传入joblib.load读取
from azure.storage.blob import BlobClient import joblib from io import BytesIO blob_client = BlobClient.from_connection_string('connection_string', 'myContainer', 'myBlob.joblib') downloaded_blob = blob_client.download_blob() model = joblib.load(BytesIO(downloaded_blob.readall()))
- 方案2:直接调用joblib原生兼容pickle的
loads接口,直接接收二进制字节串
from azure.storage.blob import BlobClient import joblib blob_client = BlobClient.from_connection_string('connection_string', 'myContainer', 'myBlob.joblib') downloaded_blob = blob_client.download_blob() # 用法和pickle.loads完全一致 model = joblib.loads(downloaded_blob.readall())
内容的提问来源于stack exchange,提问作者Christian
相关产品推荐
相关产品推荐

