Avro Python из CSV - avro.io.AvroTypeException: данные не являются примером схемы - PullRequest
0 голосов
/ 11 мая 2018

Я новичок в Avro.Я пытаюсь проанализировать простой CSV-файл, содержащий одно строковое значение и одно значение int, но я получаю сообщение об ошибке: avro.io.AvroTypeException: элемент данных не является примером схемы

Схема, которую я использую:

{"namespace": "paymenttransaction",
 "type": "record",
 "name": "Payment",
 "fields": [
     {"name": "TransactionId", "type": "string"},
     {"name": "Id",  "type": "int"}
 ]
}

Файл CSV содержит:

TransactionId,Id
2018040101000222749,1

И код Python, который я запускаю для производителя:

from confluent_kafka import avro
from confluent_kafka.avro import AvroProducer
import csv

value_schema = avro.load('/home/daniela/avro/example.avsc')

AvroProducerConf = {'bootstrap.servers': 'localhost:9092',
                    'schema.registry.url': 'http://localhost:8081',
                    }

avroProducer = AvroProducer(AvroProducerConf, default_value_schema=value_schema)

with open('/home/usertest/avro/data/paymenttransactions.csv') as file:
    reader = csv.DictReader(file, delimiter=",")
    for row in reader:

        avroProducer.produce(topic='test', value=row)
        print(row)
        avroProducer.flush()

Что я делаю не так?

1 Ответ

0 голосов
/ 17 мая 2018

Это потому, что Id по-прежнему является строкой, а для схемы требуется int.

Попробуйте:

with open('/home/usertest/avro/data/paymenttransactions.csv') as file:
    reader = csv.DictReader(file, delimiter=",")
    for row in reader:
        data_set = {"TransactionId": row["TransactionId"], "Id": int(row["Id"])}
        avroProducer.produce(topic='test', value=data_set)
        print(row)
        avroProducer.flush()
...