Загрузка файла выбора в функцию Azure из Azure хранилища BLOB-объектов - PullRequest
1 голос
/ 26 марта 2020

Я пытаюсь построить сервис с помощью Azure функций, которые выполняют умножение матриц, используя вектор, заданный http-запросом, и матрицу фиксированных numpy. Матрица хранится в Azure хранилище больших двоичных объектов в виде файла выбора, и я хочу загрузить его через привязку ввода. Однако мне не удается загрузить файл рассола. Я могу загружать простые текстовые файлы. Прямо сейчас мой подход выглядит следующим образом:

    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' . Другой подход, который я попробовал после некоторого поиска в Google, был следующий:

    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? Это даже правильный подход - использовать привязки ввода для загрузки таких файлов или есть лучший способ? Большое спасибо за вашу помощь!

1 Ответ

0 голосов
/ 30 марта 2020

Спасибо за вклад evilSnobu.

Поэтому, когда сталкиваешься с этой проблемой, это означает, что файл pickle, который ты получаешь в своем коде, поврежден.

Решение - добавить "dataType": "binary" к входной привязке в функции. json.

Как это:

{
  "name": "inputBlob",
  "type": "blob",
  "dataType": "binary",
  "direction": "in",
  "path": "xxx/xxx.xxx",
  "connection": "AzureWebJobsStorage"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...