我尝试通过Azure函数构建服务,该函数使用http请求和固定numpy矩阵给出的向量执行矩阵乘法。矩阵作为泡菜文件存储在Azure Blob存储中,我想通过输入绑定加载它。但是,我无法加载泡菜文件。我能够加载纯文本文件。现在,我的方法如下所示:
def main(req: func.HttpRequest, blobIn: func.InputStream) -> func.HttpResponse:
logging.info('Python HTTP trigger function processed a request.')
matrix = pickle.loads(blobIn.read())
vector = req.params.get('vector')
result = matrix.dot(vector)
return func.HttpResponse(json.dumps(result))
我以这种方式运行时遇到的错误是UnpicklingError:无效的加载键'\ xef'。经过一番谷歌搜索后,我尝试的另一种方法是:
def main(req: func.HttpRequest, blobIn: func.InputStream) -> func.HttpResponse:
logging.info('Python HTTP trigger function processed a request.')
blob_bytes = matrix.read()
blob_to_read = BytesIO(blob_bytes)
with blob_to_read as f:
A = pickle.load(f)
vector = req.params.get('vector')
result = matrix.dot(vector)
return func.HttpResponse(json.dumps(result))
但是它会产生相同的错误。我还尝试将矩阵保存到文本文件中,获取字符串并基于字符串构建矩阵,但是遇到了其他问题。那么如何在我的Azure函数中加载一个pickle文件呢?使用输入绑定加载此类文件甚至是正确的方法还是有更好的方法?非常感谢您的帮助!
感谢evilSnobu的贡献。
因此,当遇到此问题时,这意味着您从代码中获取的pickle文件已损坏。
解决方案是添加"dataType": "binary"
到function.json中的输入绑定中。
像这样:
{
"name": "inputBlob",
"type": "blob",
"dataType": "binary",
"direction": "in",
"path": "xxx/xxx.xxx",
"connection": "AzureWebJobsStorage"
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句