向avro文件添加新的字段/列

时间:2018-10-21 18:01:16

标签: python bigdata avro

假设我有一个Avro文件,并且我想知道如何添加新字段/列(例如timestamp)来存储python中每个记录的当前系统时间戳。

我正在尝试提取avro模式并附加时间戳记field_name,然后将时间戳记值列添加到数据文件中。

我是python和avro的新手。有人可以帮助我吗?

1 个答案:

答案 0 :(得分:2)

如果您想使用fastavro库进行此操作,则首先要读取avro文件,以获取模式及其中当前包含的记录:

import fastavro

with open('file.avro', 'rb') as fo:
    avro_reader = fastavro.reader(fo)
    schema = avro_reader.writer_schema
    records = list(avro_reader)

然后修改schema以包括新字段:

schema["fields"].append({
    "name": "timestamp",
    "type": "long",
})

扩充记录以添加新的timestamp值:

for record in records:
    record["timestamp"] = new_timestamp

最后写入新的avro文件:

with open('new_file.avro', 'wb') as out:
    fastavro.writer(out, schema, records)

您可能还想研究为此值使用逻辑类型。有关更多详细信息,请参见the avro specification