反序列化,Avro 中的固定数据类型
Deserialization, fixed data type in Avro
我是 avro 的新手,我有一个要反序列化的 avro 文件。一些模式使用固定类型的数据来存储 MAC 地址。下面的架构是这些架构之一,并在不同的架构中作为一种类型使用。
MAC 地址的架构如下:
{
"type": "fixed",
"name": "MacAddress",
"size": 6
}
我使用以下方法将数据的第一条记录写入文本文件:
from avro.datafile import DataFileReader
from avro.io import DatumReader
reader = DataFileReader(open("data.avro", "rb"), DatumReader())
count = 0
for record in reader:
if count == 0:
with open('first_record.txt', 'w') as first_record:
first_record.write(str(record))
elif count > 0: break
count = count + 1
reader.close()
上面提到的 MAC 地址出现在反序列化数据中,如:
"MacAddress":"b""\x36\xe9\xad\x64\x2d\x3d",
我知道\x表示后面是十六进制值。所以这应该是“36:e9:ad:64:2d:3d”,对吧? “b”“”样式值是固定类型的预期输出吗?
此外,一些值如下:
"Addr":"b""j\x26\xb7\xda\x1d\xf6"
"Addr":"b""\x28\xcb\xc5v\x14%"
为什么这些是 MAC 地址? j, % 字符是什么意思?
Are "b""" style values the expected output for fixed types?
是的,因为固定类型表示字节,而在 Python 上,字节字符串在事物字符串之前用前缀 b
表示。看起来你在那里有很多额外的引号,我猜那是因为你正在做 str(record)
这样的事情,这可能会导致额外的反斜杠和引号字符。例如:
>>> str(b"\xae")
"b'\xae'"
How come these are MAC addresses? What does j, % characters means?
您确定这些记录类型相同吗?关键是 Addr
而不是 MacAddress
所以看起来它可能是不同的记录类型和模式。
我是 avro 的新手,我有一个要反序列化的 avro 文件。一些模式使用固定类型的数据来存储 MAC 地址。下面的架构是这些架构之一,并在不同的架构中作为一种类型使用。
MAC 地址的架构如下:
{
"type": "fixed",
"name": "MacAddress",
"size": 6
}
我使用以下方法将数据的第一条记录写入文本文件:
from avro.datafile import DataFileReader
from avro.io import DatumReader
reader = DataFileReader(open("data.avro", "rb"), DatumReader())
count = 0
for record in reader:
if count == 0:
with open('first_record.txt', 'w') as first_record:
first_record.write(str(record))
elif count > 0: break
count = count + 1
reader.close()
上面提到的 MAC 地址出现在反序列化数据中,如:
"MacAddress":"b""\x36\xe9\xad\x64\x2d\x3d",
我知道\x表示后面是十六进制值。所以这应该是“36:e9:ad:64:2d:3d”,对吧? “b”“”样式值是固定类型的预期输出吗?
此外,一些值如下:
"Addr":"b""j\x26\xb7\xda\x1d\xf6"
"Addr":"b""\x28\xcb\xc5v\x14%"
为什么这些是 MAC 地址? j, % 字符是什么意思?
Are "b""" style values the expected output for fixed types?
是的,因为固定类型表示字节,而在 Python 上,字节字符串在事物字符串之前用前缀 b
表示。看起来你在那里有很多额外的引号,我猜那是因为你正在做 str(record)
这样的事情,这可能会导致额外的反斜杠和引号字符。例如:
>>> str(b"\xae")
"b'\xae'"
How come these are MAC addresses? What does j, % characters means?
您确定这些记录类型相同吗?关键是 Addr
而不是 MacAddress
所以看起来它可能是不同的记录类型和模式。