当前位置: 首页 > 知识库问答 >
问题:

Azure函数-Python(Blob触发器和绑定)

麹鸿煊
2023-03-14

我已经审阅了Microsoft提供的关于触发器的文档。[https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-storage-blob-trigger?tabs=python][1]

事实上,在Azure函数中使用func.InputStream参数允许我们检索blob和一些属性(name, uri, long),我们还可以使用read()函数读取字节,但是我们如何将字节转换为我们可以操作的对象,例如Pandas数据框(或其他类型文件的任何其他类型的对象,即jpg)?

我的host.json文件可以在下面找到:

{
  "scriptFile": "__init__.py",
  "bindings": [
    {
      "name": "myblob",
      "type": "blobTrigger",
      "direction": "in",
      "path": "statscan/raw/ncdb/{name}",
      "connection": ""
    },
    {
      "type": "blob",
      "direction": "out",
      "name": "outputBlob",
      "path": "statscan/enriched/func/{name}.csv",
      "connection": ""
    }
  ]
}

Blob触发器功能可在下面找到:

import pandas as pd
import logging
import azure.functions as func

def main(myblob: func.InputStream, outputBlob: func.Out[str]):

    logging.info(f"Blob trigger executed!")
    logging.info(f"Blob Name: {myblob.name} ({myblob.length}) bytes")
    logging.info(f"Full Blob URI: {myblob.uri}")

    ### Manipulate with Pandas ###

    ### Output ###
    output = ''
    outputBlob.set(output)

共有1个答案

刘博文
2023-03-14

我们有多种方法来检查文件内容并相应地读取它,在您的情况下,让我们考虑将csv格式视为blob。

>

  • 为了实现这一点,我们可以下载blob,然后将数据读取到dataframe,以下是我从MS Docs(https://docs.microsoft.com/en-us/azure/architecture/data-science-process/explore-data-blob)中尝试的方式:

      from azure.storage.blob import BlobServiceClient
      import pandas as pd
    
      STORAGEACCOUNTURL= <storage_account_url>
      STORAGEACCOUNTKEY= <storage_account_key>
      LOCALFILENAME= <local_file_name>
      CONTAINERNAME= <container_name>
      BLOBNAME= <blob_name>
    
      #download from blob
      t1=time.time()
      blob_service_client_instance = BlobServiceClient(account_url=STORAGEACCOUNTURL, credential=STORAGEACCOUNTKEY)
      blob_client_instance = blob_service_client_instance.get_blob_client(CONTAINERNAME, BLOBNAME, snapshot=None)
      with open(LOCALFILENAME, "wb") as my_blob:
          blob_data = blob_client_instance.download_blob()
          blob_data.readinto(my_blob)
      t2=time.time()
      print(("It takes %s seconds to download "+BLOBNAME) % (t2 - t1))
    

    否则我们可以直接使用blob sas url转换如下:

      from io import StringIO
      blobstring = blob_service.get_blob_to_text(CONTAINERNAME,BLOBNAME).content
      df = pd.read_csv(StringIO(blobstring))
    

    另一种方法是使用blob sas url,我们可以在右键单击blob并选择“生成sas”后获得它:

        import pandas as pd
        data = pd.read_csv('blob_sas_url')
    
    
    

  •  类似资料:
    • 我使用blob触发器读取blob内容,作为pandas DF进行处理,并将blob附加到我使用的Azure SQL server。 blob触发器没有按预期工作,因此我将main函数中的所有代码都定义为: 但是,我得到了以下错误: 有人可以帮助我找到此问题的原因吗? function.json的配置如下:

    • 如果你使用blob存储触发器阅读Azure WebJobs上的留档,它们会提到这不是很可靠: WebJobs SDK扫描日志文件以查看新的或更改的blob。这个过程不是实时的;在创建blob后的几分钟或更长时间内,函数可能不会被触发。此外,存储日志是在“尽力而为”的基础上创建的;无法保证所有事件都将被捕获。在某些情况下,日志可能会丢失。如果您的应用程序无法接受blob触发器的速度和可靠性限制,建议

    • 我是Azure Function应用程序中blob触发器的新手,需要一些帮助。我正在努力寻找有关如何重命名触发该函数的blob的资源。 我有一个函数应用程序,当一个新的blob被上传到容器时触发,文件被处理,我需要一种方法来将其“标记”为已处理,因此我想重命名blob。 这是我的职责: 我该如何重命名该文件?在这种情况下有可能吗?

    • Azure函数存储帐户Blob容器触发器 在我们的一个用例中,我正在为具有以下条件的存储帐户容器中的任何活动寻找Azure函数触发器 < li >具有特定命名约定的容器(名称如xxxx-input) < li >它应该自动检测是否创建了新的容器(具有特定的命名约定) < li>

    • 我遇到的情况是,Blob可能在第一次处理时失败,但可能在后续执行中工作。 我遇到的问题是关于监控真正的失败,目前第一次失败将抛出一个异常,该异常被记录并发出警报,但如果第一次重试成功完成,那么根据早期警报就没有什么可做的了。 是否有办法查看已发生的重试次数,以便我只能在不再重试时发出警报?

    • 有没有人知道某种方法可以触发具有 Blob 触发器的 Azure 函数?无论是通过API还是使用“测试/运行”功能。 情况是,我需要在测试目的中这样做。目前我看到的是,可以在blob存储中提供要触发的文件的名称。但这是无用的,因为无论如何,将文件放在那里都会触发功能。我想做的是为文件的内容而不是名称提供功能,以避免不必要的操作。 不幸的是,微软在所有相关主题上的留档很差,但这个没有。在这个gith