【发布时间】:2018-10-21 18:01:15
【问题描述】:
假设我有一个 Avro 文件,我想知道如何添加新的字段/列,例如时间戳,以便在 python 中存储每条记录的当前系统时间戳。
我正在尝试提取 avro 架构并附加时间戳字段名称,然后将时间戳值列添加到数据文件中。
我是 python 和 avro 的新手。有人可以帮助我如何进行。
【问题讨论】:
假设我有一个 Avro 文件,我想知道如何添加新的字段/列,例如时间戳,以便在 python 中存储每条记录的当前系统时间戳。
我正在尝试提取 avro 架构并附加时间戳字段名称,然后将时间戳值列添加到数据文件中。
我是 python 和 avro 的新手。有人可以帮助我如何进行。
【问题讨论】:
如果您想使用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。
【讨论】: