从 Python 3 和 Avro 1.7.6 开始,步骤是什么?(问答)

Ami*_*rHd 4 python apache schema python-3.x avro

这是一个问答,这意味着我正在分享我对我遇到的问题的解决方案/答案:

问题是来自 apache 站点的入门指南并不完全是最新的,经过一番摆弄后,我设法让示例工作。

  1. 首先从这里获取最新版本
  2. 转到 lang 下的 py3 子文件夹并通过您的 python 3 构建项目(在此处阅读更多信息
  3. 在将要定位的 Python 代码所在的文件夹中创建 user.avsc。

    架构:

     {
    
      "namespace": "example.avro",
      "type": "record",
      "name": "User",
      "fields": [
          {"name": "name", "type": "string"},
          {"name": "favorite_number",  "type": ["int", "null"]},
          {"name": "favorite_color", "type": ["string", "null"]}
      ]
     }
    
    Run Code Online (Sandbox Code Playgroud)
  4. 从下面提供的代码创建 .py(请注意,我必须对此处的代码进行细微更改才能使其正常工作)。

    修改后的代码如下。

    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", "wb"), DatumWriter(), schema)
    writer.append({"name": "Alyssa", "favorite_number": 256})
    writer.append({"name": "Ben", "favorite_number": 7, "favorite_color": "red"})
    writer.close()
    
    reader = DataFileReader(open("users.avro", "rb"), DatumReader())
    for user in reader:
        print(user)
    
    reader.close()
    
    Run Code Online (Sandbox Code Playgroud)

Ami*_*rHd 5

  1. 首先从这里获取最新版本
  2. 转到 lang 下的 py3 子文件夹并通过您的 python 3 构建项目(在此处阅读更多信息
  3. 在将要定位的 Python 代码所在的文件夹中创建 user.avsc。

    架构:

     {
    
      "namespace": "example.avro",
      "type": "record",
      "name": "User",
      "fields": [
          {"name": "name", "type": "string"},
          {"name": "favorite_number",  "type": ["int", "null"]},
          {"name": "favorite_color", "type": ["string", "null"]}
      ]
     }
    
    Run Code Online (Sandbox Code Playgroud)
  4. 从下面提供的代码创建 .py(请注意,我必须对此处的代码进行细微更改才能使其正常工作)。

    修改后的代码如下。

    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", "wb"), DatumWriter(), schema)
    writer.append({"name": "Alyssa", "favorite_number": 256})
    writer.append({"name": "Ben", "favorite_number": 7, "favorite_color": "red"})
    writer.close()
    
    reader = DataFileReader(open("users.avro", "rb"), DatumReader())
    for user in reader:
        print(user)
    
    reader.close()
    
    Run Code Online (Sandbox Code Playgroud)