首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >测试并将avro (.avsc)转换为.avro。AttributeError、数组和编码

测试并将avro (.avsc)转换为.avro。AttributeError、数组和编码
EN

Stack Overflow用户
提问于 2017-11-07 10:23:26
回答 1查看 1.3K关注 0票数 0

我刚开始使用hadoop,我使用的是Avro (快速)。

1-我想验证模式并转换为.avro文件。

代码语言:javascript
复制
{
 "type": "record",
 "name": "Node",
 "fields": [
    {
        "name": "nom",
        "type": "string"
    },
    {
        "name": "zone",
        "type": {
            "type": "map",
            "values": "string"
        }
    },
    {
        "name": "price",
        "type": "float"
    },
    {
        "name": "type",
        "type": "string"
    }
  ]
}

我的测试文件(验证模式):

代码语言:javascript
复制
#!/usr/local/bin/python
# -*- coding: utf-8 -*-
import json
import fastavro

schema = json.load(open("myschema.avsc"))
records = [
    {
        "nom": "blabla",
        "zone": ["north", "south", "east"],
        "prix": 4.0,
        "type": "geoloc"
    }
]

fastavro.writer(open("myschema.avro", "wb"), schema, records)

我有个错误:

代码语言:javascript
复制
Traceback (most recent call last):
  File "test-schema.py", line 17, in <module>
    fastavro.writer(open("myschema.avro", "wb"), schema, records)
  File "/var/www/data-machine/HDFS/env/lib/python3.5/site-packages/fastavro/writer.py", line 614, in writer
    output.write(record)
  File "/var/www/data-machine/HDFS/env/lib/python3.5/site-packages/fastavro/writer.py", line 537, in write
    write_data(self.io, record, self.schema)
  File "/var/www/data-machine/HDFS/env/lib/python3.5/site-packages/fastavro/writer.py", line 432, in write_data
    return fn(fo, datum, schema)
  File "/var/www/data-machine/HDFS/env/lib/python3.5/site-packages/fastavro/writer.py", line 363, in write_record
    name, field.get('default')), field['type'])
  File "/var/www/data-machine/HDFS/env/lib/python3.5/site-packages/fastavro/writer.py", line 432, in write_data
    return fn(fo, datum, schema)
  File "/var/www/data-machine/HDFS/env/lib/python3.5/site-packages/fastavro/writer.py", line 232, in write_map
    for key, val in iteritems(datum):
  File "/var/www/data-machine/HDFS/env/lib/python3.5/site-packages/fastavro/six.py", line 27, in py3_iteritems
    return obj.items()
AttributeError: 'list' object has no attribute 'items'

2-而且,如果我添加一个数组:

代码语言:javascript
复制
{
    "name": "ingredients", 
    "type": ["string"]
},

错误:

代码语言:javascript
复制
  File "/var/www/data-machine/HDFS/env/lib/python3.5/site-packages/fastavro/writer.py", line 345, in write_union
    raise ValueError(msg)
ValueError: ["north", "south", "east"] (type <class 'list'>) do not match ['string']

最后,我想让“区域”领域选择..。

(谢谢:) Fabrice

EN

回答 1

Stack Overflow用户

发布于 2017-11-09 15:34:32

你的地图记录信息是错误的。它期待的东西是

代码语言:javascript
复制
"zone":{"key1":"val1","key2":"val2","key3":"val3"},

这是一张地图,不是一套。如果需要类似于示例的内容,则需要使用数组而不是地图。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47155464

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档