如何使用avro-python3 on Windows 10解析文件?
How to use avro-python3 on Windows 10 to parse files?
我已经从 Microsoft Azure 下载了一个 AVRO 文件(带有 JSON 负载)到我的 Windows 10 计算机:
然后通过 pip 安装 python 3.8.5 和 avro 1.10.0 我尝试了 运行 以下脚本:
import os, avro
from avro.datafile import DataFileReader, DataFileWriter
from avro.io import DatumReader, DatumWriter
reader = DataFileReader(open("48.avro", "rb"), DatumReader())
for d in reader:
print(d)
reader.close()
不幸的是,脚本没有打印任何内容。
然后我四处搜索并尝试添加如下架构:
schema_str = """
{
"type" : "record",
"name" : "EventData",
"namespace" : "Microsoft.ServiceBus.Messaging",
"fields" : [ {
"name" : "SequenceNumber",
"type" : "long"
}, {
"name" : "Offset",
"type" : "string"
}, {
"name" : "EnqueuedTimeUtc",
"type" : "string"
}, {
"name" : "SystemProperties",
"type" : {
"type" : "map",
"values" : [ "long", "double", "string", "bytes" ]
}
}, {
"name" : "Properties",
"type" : {
"type" : "map",
"values" : [ "long", "double", "string", "bytes", "null" ]
}
}, {
"name" : "Body",
"type" : [ "null", "bytes" ]
} ]
}
"""
schema = avro.schema.parse(schema_str)
reader = DataFileReader(open("48.avro", "rb"), DatumReader(schema, schema))
for d in reader:
print(d)
reader.close()
但这并没有帮助,仍然没有打印任何内容。
虽然我期待打印字典对象列表...
更新:
我在 mailing list 收到回复说 avro-python3 已弃用。
我对原始 avro 的问题仍然存在,没有打印任何内容。
更新 2:
我必须道歉 - 我使用的 avro 文件不包含任何有用的数据。我感到困惑的原因是一位同事在为我测试时使用了同名的不同文件。
现在我已经在不同的 avro 文件上尝试了 avro 和 fastavro 模块并且都有效。我也会看看 PySpark。
正如 OneCricketeer 建议的那样,使用 PySpark 读取 EventHub 生成的 avro 文件。这里,PySpark: Deserializing an Avro serialized message contained in an eventhub capture avro file 就是这样一个例子。
我已经从 Microsoft Azure 下载了一个 AVRO 文件(带有 JSON 负载)到我的 Windows 10 计算机:
然后通过 pip 安装 python 3.8.5 和 avro 1.10.0 我尝试了 运行 以下脚本:
import os, avro
from avro.datafile import DataFileReader, DataFileWriter
from avro.io import DatumReader, DatumWriter
reader = DataFileReader(open("48.avro", "rb"), DatumReader())
for d in reader:
print(d)
reader.close()
不幸的是,脚本没有打印任何内容。
然后我四处搜索并尝试添加如下架构:
schema_str = """
{
"type" : "record",
"name" : "EventData",
"namespace" : "Microsoft.ServiceBus.Messaging",
"fields" : [ {
"name" : "SequenceNumber",
"type" : "long"
}, {
"name" : "Offset",
"type" : "string"
}, {
"name" : "EnqueuedTimeUtc",
"type" : "string"
}, {
"name" : "SystemProperties",
"type" : {
"type" : "map",
"values" : [ "long", "double", "string", "bytes" ]
}
}, {
"name" : "Properties",
"type" : {
"type" : "map",
"values" : [ "long", "double", "string", "bytes", "null" ]
}
}, {
"name" : "Body",
"type" : [ "null", "bytes" ]
} ]
}
"""
schema = avro.schema.parse(schema_str)
reader = DataFileReader(open("48.avro", "rb"), DatumReader(schema, schema))
for d in reader:
print(d)
reader.close()
但这并没有帮助,仍然没有打印任何内容。
虽然我期待打印字典对象列表...
更新:
我在 mailing list 收到回复说 avro-python3 已弃用。
我对原始 avro 的问题仍然存在,没有打印任何内容。
更新 2:
我必须道歉 - 我使用的 avro 文件不包含任何有用的数据。我感到困惑的原因是一位同事在为我测试时使用了同名的不同文件。
现在我已经在不同的 avro 文件上尝试了 avro 和 fastavro 模块并且都有效。我也会看看 PySpark。
正如 OneCricketeer 建议的那样,使用 PySpark 读取 EventHub 生成的 avro 文件。这里,PySpark: Deserializing an Avro serialized message contained in an eventhub capture avro file 就是这样一个例子。