简体   繁体   English

使用 python 在文件中写入 avro 记录

[英]Write avro record in file using python

I have the avro file with name test.avsc and with schema as:我有一个名为 test.avsc 的 avro 文件,其架构为:

{
    "namespace": "test",
    "type": "record",
    "name": "test.schema",
    "fields": [
      { "name": "device", "type": ["null", "string"] , "default" : null }
    ]
}

My avro class is:我的 avro class 是:

import avro.schema
from avro.datafile import DataFileWriter
from avro.io import DatumWriter

class AvroHelper(object):

    avro_writer = None
    codec = 'deflate'

    def __init__(self, schemaf, avrofile):
        schema = avro.schema.parse(schemaf)
        self.avro_writer = DataFileWriter(avrofile, DatumWriter(), schema, codec=self.codec)
        self.num_rows_written_to_avro = 0

    def append(self, row):
        self.avro_writer.append(row)

I am trying to write data as:我正在尝试将数据写入:

file = open('test1.avro', 'wb')
avro_writer = AvroHelper('test.avsc', file)

rec= { 'device': "1" }
avro_writer.append(rec)

I am getting exception as, while trying to write avro record in a file:我在尝试将 avro 记录写入文件时遇到异常:


File "search_console_api_client.py", line 31, in __init__
    schema = avro.schema.parse(schema_str)
  File "/usr/local/lib/python3.7/site-packages/avro/schema.py", line 1238, in parse
    % (json_string, exn))
avro.schema.SchemaParseException: Error parsing schema from JSON: 'test.avsc'. Error message: JSONDecodeError('Expecting value: line 1 column 1 (char 0)').

How can I make it work?我怎样才能让它工作?

You are doing你在做

avro_writer = AvroHelper('test.avsc', file)

Which means your __init__ is having this happen:这意味着您的__init__正在发生这种情况:

schema = avro.schema.parse('test.avsc')

However, the parse() function is supposed to take in the JSON string of the schema, not the name of the file.但是, parse() function 应该接受架构的 JSON 字符串,而不是文件名。 Instead, you probably want to do something like this:相反,您可能想做这样的事情:

avro_writer = AvroHelper(open('test.avsc').read(), file)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM