[英]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.