从 Azure Blob 存储在 Azure 函数中加载 pickle 文件
Load pickle file in Azure function from Azure Blob Storage
我尝试通过 Azure 函数构建服务,这些函数使用 http 请求给出的向量和修复的 numpy 矩阵执行矩阵乘法。该矩阵作为 pickle 文件存储在 Azure blob 存储中,我想通过输入绑定加载它。但是我没有设法加载 pickle 文件。我能够加载纯文本文件。
现在我的方法是这样的:
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: invalid load key, '\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"
}
我尝试通过 Azure 函数构建服务,这些函数使用 http 请求给出的向量和修复的 numpy 矩阵执行矩阵乘法。该矩阵作为 pickle 文件存储在 Azure blob 存储中,我想通过输入绑定加载它。但是我没有设法加载 pickle 文件。我能够加载纯文本文件。 现在我的方法是这样的:
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: invalid load key, '\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"
}