Как прочитать паркетный файл из привязки ввода BLOB-функции Azure? - PullRequest
0 голосов
/ 06 ноября 2019

У меня есть функция Python с привязкой ввода BLOB-объектов. Данный блоб содержит файл паркета. В конечном счете, я хочу прочитать связанный большой двоичный объект в информационный фрейм pandas, но я не уверен в правильном способе сделать это.

Я проверил, что привязка настроена правильно, и я смог успешно прочитатьпростой текстовый файл. Я рад, что целостность файла паркета в порядке, так как я смог прочитать его, используя приведенный здесь пример: https://arrow.apache.org/docs/python/parquet.html#reading-a-parquet-file-from-azure-blob-storage

Следующий код показывает, что я пытаюсь сделать:


import logging
import io
import azure.functions as func
import pyarrow.parquet as pq


def main(req: func.HttpRequest,  inputblob: func.InputStream) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')

    # Create a bytestream to hold blob content
    byte_stream = io.BytesIO()
    byte_stream.write(inputblob.read())
    df = pq.read_table(source=byte_stream).to_pandas()

Я получаю следующее сообщение об ошибке:

pyarrow.lib.ArrowIOError: Couldn't deserialize thrift: TProtocolException: Invalid data

Ниже приведен мой файл function.json:

{
  "scriptFile": "__init__.py",
  "bindings": [
    {
      "authLevel": "function",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req",
      "methods": [
        "get",
        "post"
      ]
    },
    {
      "type": "http",
      "direction": "out",
      "name": "$return"
    },
    {
        "name": "inputblob",
        "type": "blob",
        "path": "<container>/file.parquet",
        "connection": "AzureWebJobsStorage",
        "direction": "in"
    }
  ]
}

Мой файл host.json:

{
    "version":  "2.0",
    "functionTimeout": "00:10:00",
    "extensionBundle": {
        "id": "Microsoft.Azure.Functions.ExtensionBundle",
        "version": "[1.*, 2.0.0)"
    }
}
...