假设我有一个Avro文件,并且我想知道如何添加新字段/列(例如timestamp)来存储python中每个记录的当前系统时间戳。
我正在尝试提取avro模式并附加时间戳记field_name,然后将时间戳记值列添加到数据文件中。
我是python和avro的新手。有人可以帮助我吗?
答案 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。