【问题标题】:How to extract schema for avro file in python如何在python中提取avro文件的模式
【发布时间】:2014-09-20 07:00:00
【问题描述】:

我正在尝试使用 Python Avro 库 (https://pypi.python.org/pypi/avro) 来读取由 JAVA 生成的 AVRO 文件。既然 schema 已经嵌入在 avro 文件中了,为什么还要指定一个 schema 文件呢?有没有办法自动提取?

发现另一个名为 fastavro(https://pypi.python.org/pypi/fastavro) 的包可以提取 avro 模式。 python arvo包中的手动指定模式文件是设计的吗?非常感谢。

【问题讨论】:

    标签: python schema avro


    【解决方案1】:

    在我的例子中,为了将架构作为一个“消耗性”python 字典,其中包含有用的信息,例如架构名称等,我做了以下操作:

    reader: DataFileReader = DataFileReader(open(avro_file, 'rb'), DatumReader())
    schema: dict = json.loads(reader.meta.get('avro.schema').decode('utf-8'))
    

    reader.meta 是一个“按原样”非常无用的字典,因为它包含 2 个键:avro.codecavro.schema,它们都是 bytes 对象(所以我必须解析它才能访问属性)。

    【讨论】:

      【解决方案2】:

      我使用 python 3.4 和 Avro 包 1.7.7

      用于架构文件:

      reader = avro.datafile.DataFileReader(open('file_name.avro',"rb"),avro.io.DatumReader())
      schema = reader.meta
      print(schema) 
      

      【讨论】:

      • 这也适用于 Python 2.7。我的导入语句如下(不知道你需要多少): import avro.schema from avro.datafile import DataFileReader from avro.io import DatumReader
      【解决方案3】:

      /usr/local/lib/python2.7/site-packages/avro/datafile.py 的直接检查揭示了答案:

      reader = avro.datafile.DataFileReader(input,avro.io.DatumReader())
      schema = reader.datum_reader.writers_schema
      print schema
      

      奇怪的是,在 Java 中有一个特殊的方法:reader.getSchema()

      【讨论】:

        猜你喜欢
        • 2018-01-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-17
        • 1970-01-01
        相关资源
        最近更新 更多