簡體   English   中英

如何使用 Python Avro api 將 JSON 解析為二進制 Avro 文件?

[英]How can I parse JSON into a binary Avro file using the Python Avro api?

我能夠使用 avro-tools-1.7.7.jar 來獲取 json 數據和 avro 模式並輸出一個二進制 Avro 文件,如下所示https://github.com/miguno/avro-cli-examples#json-to -avro 但是,我希望能夠使用 Avro python api 以編程方式執行此操作: https : //avro.apache.org/docs/1.7.7/gettingstartedpython.html

在他們的示例中,他們展示了如何一次將記錄寫入二進制 avro 文件。

    import avro.schema
    from avro.datafile import DataFileReader, DataFileWriter
    from avro.io import DatumReader, DatumWriter

    schema = avro.schema.parse(open("user.avsc").read())

    writer = DataFileWriter(open("users.avro", "w"), DatumWriter(), schema)
    writer.append({"name": "Alyssa", "favorite_number": 256})
    writer.append({"name": "Ben", "favorite_number": 7, "favorite_color": "red"})
    writer.close()

我的用例是一次寫入所有記錄,就像 avro-tools jar 從 json 文件中所做的那樣,只是在 python 代碼中。 我不想掏空並執行jar。 如果這很重要,這將部署到 Google App Engine。

這可以通過fastavro來完成。 例如,給定鏈接中的架構:

推特.avsc

{
  "type" : "record",
  "name" : "twitter_schema",
  "namespace" : "com.miguno.avro",
  "fields" : [ {
    "name" : "username",
    "type" : "string",
    "doc" : "Name of the user account on Twitter.com"
  }, {
    "name" : "tweet",
    "type" : "string",
    "doc" : "The content of the user's Twitter message"
  }, {
    "name" : "timestamp",
    "type" : "long",
    "doc" : "Unix epoch time in seconds"
  } ],
  "doc:" : "A basic schema for storing Twitter messages"
}

和 json 文件:

推特.json

{"username":"miguno","tweet":"Rock: Nerf paper, scissors is fine.","timestamp": 1366150681 }
{"username":"BlizzardCS","tweet":"Works as intended.  Terran is IMBA.","timestamp": 1366154481 }

您可以使用類似於以下腳本的內容來寫出一個 avro 文件:

import json
from fastavro import json_reader, parse_schema, writer

with open("twitter.avsc") as fp:
    schema = parse_schema(json.load(fp))

with open("twitter.avro", "wb") as avro_file:
    with open("twitter.json") as fp:
        writer(avro_file, schema, json_reader(fp, schema))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM