avro格式,通过python定位或跳过行

时间:2018-07-05 21:39:23

标签: python avro

我正在使用Apache Avro 1.8.2读取大型avro文件。但是,我想跳过前N个记录或使用5个线程处理文件的各个部分。

有没有一种简单的方法可以在avro文件中查找而不导致数据损坏,而不是依次遍历每个记录?我相信它是可拆分的格式,但是我不确定python avro模块是否支持安全地跳转到特定位置。

当前我所能做的就是逐行处理它:

reader = DataFileReader(open("users.avro", "rb"), DatumReader())
i = 0
for user in reader:
    i += 1
    if (i>10000):
      break

1 个答案:

答案 0 :(得分:0)

我不确定在标准avro库中是否可以使用它,但是在fastavro中有一个block_reader接口,您应该可以使用。

如下所示:

import fastavro

with open("file.avro", "rb") as fp:
    for block in fastavro.block_reader(fp, schema):
        process_block(block)

process_block是将在线程中运行的函数,它将执行以下操作:

def process_block(block):
    for record in block:
        process_record(record)