【问题标题】:Adding a new field/column to avro file将新字段/列添加到 avro 文件
【发布时间】:2018-10-21 18:01:15
【问题描述】:

假设我有一个 Avro 文件,我想知道如何添加新的字段/列,例如时间戳,以便在 python 中存储每条记录的当前系统时间戳。

我正在尝试提取 avro 架构并附加时间戳字段名称,然后将时间戳值列添加到数据文件中。

我是 python 和 avro 的新手。有人可以帮助我如何进行。

【问题讨论】:

    标签: python bigdata avro


    【解决方案1】:

    如果您想使用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

    【讨论】:

      猜你喜欢
      • 2020-05-13
      • 1970-01-01
      • 1970-01-01
      • 2020-05-11
      • 2018-03-07
      • 2020-09-23
      • 1970-01-01
      • 1970-01-01
      • 2020-01-04
      相关资源
      最近更新 更多