Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何解析在Event Hub的存储帐户中捕获的AVRO Blob?_Python_Azure_Azure Storage Blobs_Avro_Azure Eventhub - Fatal编程技术网

Python 如何解析在Event Hub的存储帐户中捕获的AVRO Blob?

Python 如何解析在Event Hub的存储帐户中捕获的AVRO Blob?,python,azure,azure-storage-blobs,avro,azure-eventhub,Python,Azure,Azure Storage Blobs,Avro,Azure Eventhub,在Microsoft Azure中,我们有一个捕获JSON数据并将其以AVRO格式存储在blob存储帐户中的系统: 我已经编写了一个python脚本,它将从事件中心获取AVRO文件: import os, avro from io import BytesIO from operator import itemgetter, attrgetter from avro.datafile import DataFileReader, DataFileWriter from avro.io impo

在Microsoft Azure中,我们有一个捕获JSON数据并将其以AVRO格式存储在blob存储帐户中的系统:

我已经编写了一个python脚本,它将从事件中心获取AVRO文件:

import os, avro
from io import BytesIO
from operator import itemgetter, attrgetter
from avro.datafile import DataFileReader, DataFileWriter
from avro.io import DatumReader, DatumWriter
from azure.storage.blob import BlobServiceClient, BlobClient, ContainerClient

conn_str = 'DefaultEndpointsProtocol=https;AccountName=...;AccountKey=...;EndpointSuffix=core.windows.net'
container_name = 'container1'

blob_service_client = BlobServiceClient.from_connection_string(conn_str)
container_client = blob_service_client.get_container_client(container_name)

blob_list = []
for blob in container_client.list_blobs():
    if blob.name.endswith('.avro'):
        blob_list.append(blob)

blob_list.sort(key=attrgetter('creation_time'), reverse=True)
这很有效,我得到了一个AVRO blob列表,按创建时间排序

现在我尝试添加最后的步骤,在这里我将下载blob并检索JSON负载

我尝试将列表中的每个blob检索到内存缓冲区并对其进行解析:

for blob in blob_list:
    blob_client = container_client.get_blob_client(blob.name)
    downloader = blob_client.download_blob()
    stream = BytesIO()
    downloader.download_to_stream(stream) # also tried readinto(stream)

    reader = DataFileReader(stream, DatumReader())
    for event_data in reader:
        print(event_data)
    reader.close()
不幸的是,上面的Python代码不起作用,没有打印任何内容

我还看到了一个
StorageStreamDownloader.readall()
方法,但我不确定如何应用它

我使用的是由pip安装的Windows 10、python 3.8.5和avro 1.10.0。

使用
readall()
方法时,应按如下方式使用:

       with open("xxx", "wb+") as my_file: 
           my_file.write(blob_client.download_blob().readall()) # Write blob contents into the file.
有关读取捕获的eventhub数据的更多详细信息,请参阅以下官方文档:


如果您还有更多问题,请告诉我:)。

请尝试使用
readinto
方法。不幸的是,
downloader.readinto(stream)
没有更改任何内容,没有打印内容。请检查文件是否有内容:@AlexanderFarber,您好,如果答案有帮助,请接受它作为答案。谢谢