如何在Python中将JSON字符串转换为Avro?
有没有办法在Python中把一个JSON字符串转换成Avro格式,而不需要定义模式(schema)?还是说这只能用Java来做?
3 个回答
0
这应该能帮到你:
b = BytesIO(b'some message')
reader = DataFileReader(b, DatumReader())
想了解更多信息,可以看看这个 Avro Python 指南。
11
我最近也遇到了同样的问题,于是我开发了一个Python包,这个包可以处理任何Python的数据结构,包括解析后的JSON,并且可以把它存储到Avro格式中,而不需要专门的模式。
我在Python 3上进行了测试。
你可以通过 pip3 install rec-avro
来安装它,或者查看代码和文档,地址是 https://github.com/bmizhen/rec-avro。
使用示例:
from fastavro import writer, reader, schema
from rec_avro import to_rec_avro_destructive, from_rec_avro_destructive, rec_avro_schema
def json_objects():
return [{'a': 'a'}, {'b':'b'}]
# For efficiency, to_rec_avro_destructive() destroys rec, and reuses it's
# data structures to construct avro_objects
avro_objects = (to_rec_avro_destructive(rec) for rec in json_objects())
# store records in avro
with open('json_in_avro.avro', 'wb') as f_out:
writer(f_out, schema.parse_schema(rec_avro_schema()), avro_objects)
#load records from avro
with open('json_in_avro.avro', 'rb') as f_in:
# For efficiency, from_rec_avro_destructive(rec) destroys rec, and
# reuses it's data structures to construct it's output
loaded_json = [from_rec_avro_destructive(rec) for rec in reader(f_in)]
assert loaded_json == json_objects()
要把一个JSON字符串转换成JSON对象,可以使用 json.loads('{"a":"b"}')
。
-5
这是一个关于如何开始使用Apache Avro的指南,特别是针对Python编程语言的。你可以通过点击上面的链接来查看详细信息。
import avro.schema
avro.schema.parse(json_schema_string)