Я пытаюсь преобразовать некоторые CSV-файлы в файлы AVRO.Данные отсутствуют в файле AVRO
Код, который я написал, отлично работает во многих файлах CSV, которые я тестировал, но в некоторых файлах я обнаружил, что некоторые данные отсутствуют в файле AVRO.
Вот схема кода в преобразовании csv-> avro. Я использую 1.7.5 библиотеки C
// initialize line counter
lineno = 0;
// make a schema first
avro_schema_from_json_length (...);
// make a generic class from schema
iface = avro_generic_class_from_schema(schema);
// get the record size and verify that it is 109
avro_schema_record_size (schema);
// get a generic value
avro_generic_value_new (iface, &tuple);
// make me an output file
fp = fopen (outputfile, "wb");
// make me a filewriter
avro_file_writer_create_fp (fp, outputfile, 0, schema, &db);
// now for the code to emit the data
while (...)
{
avro_value_reset (&tuple);
// get the CSV record into the tuple
...
// write that tuple
avro_file_writer_append_value (db, &tuple);
lineno ++;
// flush the file
avro_file_writer_flush (db);
}
// close the output file
avro_file_writer_close (db);
// other cleanup
avro_value_iface_decref (iface);
avro_value_decref (&tuple);
// close output file
fflush (outfp);
fclose (outfp);
При запуске этой программы в формате CSV файл с 448621 строками данных и одной строки заголовка, он выходит правильно с тем, что она переработанной 448621 строк данные.
Теперь читатель это модифицированный avrocat.c
Вот код.
wschema = avro_file_reader_get_writer_schema(reader);
iface = avro_generic_class_from_schema(wschema);
avro_generic_value_new(iface, &value);
int rval;
lineno = 0;
while ((rval = avro_file_reader_read_value(reader, &value)) == 0) {
lineno ++;
avro_value_reset(&value);
}
// If it was not an EOF that caused it to fail,
// print the error.
if (rval != EOF)
{
fprintf(stderr, "Error: %s\n", avro_strerror());
}
else
{
printf ("%s %lld\n", filename, lineno);
}
Когда я запускаю это против Avro файл я только что создал, я считаю, что он имеет только 448609 строк данных.
Не уверен, что случилось с остальными ...
Что я упускаю, делаю неправильно? Какая дополнительная информация кому-то понадобится, чтобы помочь отладить это?
Я пробовал кучу вещей.
Добавление кода флеша в файл avro является одним. Я попытался сбросить файл avroat (используя avrocat) и узнать, чего не хватает, и он имеет тенденцию быть рядами в конце.