Python 如何解析在Event Hub的存储帐户中捕获的AVRO Blob?
在Microsoft Azure中,我们有一个捕获JSON数据并将其以AVRO格式存储在blob存储帐户中的系统: 我已经编写了一个python脚本,它将从事件中心获取AVRO文件: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
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,您好,如果答案有帮助,请接受它作为答案。谢谢