Ошибка синтаксического анализа на python для вложенной структуры avro - PullRequest
0 голосов
/ 27 мая 2019

У меня есть структура avro, которая ожидает структуру массива. Я создал структуру avro, но не удается выполнить синтаксический анализ моих данных в этой схеме avro

Авро схема

{
  "namespace": "com",
  "type": "record",
  "name": "customers",
  "fields": [
    {
      "name": "customer",
      "type": {
        "type": "array",
        "items": {
          "name": "cust",
          "type": "record",
          "fields": [
            {
              "name": "age",
              "type": ["long","null"]
            },
            {
              "name": "amount",
              "type": [ "long","null"]
            }
          ]
        }
      }
    }
  ]
}

Код Python

список = [[34,2000], [53,8000]]

для л в списке

    writer.append({"customer":{ "age": long(l[0]), "amount": long(l[1])}})

мой анализ неправильный? я должен добавить любой базовый объект в массив?

Ответы [ 2 ]

1 голос
/ 27 мая 2019

Ваша схема определяет запись customers как массив записей cust.Следовательно, ваши данные должны быть структурированы следующим образом:

{"customer": [cust1, cust2, ...]}

и расширяться далее:

{"customer": [{"age": X1, "amount": Y1}, {"age": X2, "amount": Y2}, ...]}

Таким образом, вы можете сохранить свою схему как есть, но вам нужно будет изменить данныеВы вставляете в соответствии с форматом выше.В качестве альтернативы вы можете сохранить ваши данные как есть, но вам необходимо изменить схему на следующую:

{
  "namespace": "com",
  "type": "record",
  "name": "customers",
  "fields": [
    {
      "name": "customer",
      "type": {
        "name": "cust",
        "type": "record",
        "fields": [
          {
            "name": "age",
            "type": ["long","null"]
          },
          {
            "name": "amount",
            "type": [ "long","null"]
          }
        ]
      }
    }
  ]
}
0 голосов
/ 28 мая 2019

Разобрался. У меня была хорошая схема avro. Единственное, что мне пришлось изменить, это то, как я добавляю объекты в автору.

list= [[34,2000],[53,8000]]
customer={}                                                                                                                  
cust ={}                                                                                                     
for l in list                                                                                                             
    cust['age']  = l[0]  
    cust['amount'] = l[1]                                     
customer.append(cust)                                                                                                            
writer.append({"customer": customer})   
...