AVRO文件中缺少数据

时间:2014-01-27 15:59:06

标签: avro

我正在尝试将一些CSV文件转换为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);

当我在一个包含448621行数据和一个标题行的CSV文件上运行此程序时,它正确处理了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行数据。

不确定其余的事情发生了什么......

我错过了什么,做错了什么? 有人需要哪些其他信息来帮助调试这个?

我尝试了很多东西。

将flash代码添加到avro文件中。 我试图转储avro文件(使用avrocat)并找出缺少的内容,最后它往往是行。

1 个答案:

答案 0 :(得分:0)

这似乎是c 1.7.5中的一个错误,它在c 1.7.6中已得到修复。

有问题的错误是

  

https://issues.apache.org/jira/browse/AVRO-1364

解决方案:升级到1.7.6 ...我确认此问题不存在。