我正在尝试将protobuf对象转换为Avro。我正在使用
Exception in thread "main" java.io.IOException: Not a data file.
at org.apache.avro.file.DataFileStream.initialize(DataFileStream.java:105)
at org.apache.avro.file.DataFileReader.<init>(DataFileReader.java:97)
at org.apache.avro.tool.DataFileGetSchemaTool.run(DataFileGetSchemaTool.java:47)
avro文件已成功创建。如果我捕获文件,我可以看到文件中的数据。但是,当我尝试使用avro-tools获取有关已保存的avro文件的架构或元信息时,它说
'12' => [
'+',
'ATGGTTTTCTTCTCTCCTTCCCTCTCCAGCCTGCTGTATAAGTAA',
'MGLGLAPSWPSLLTSSYPECVPYLFSHLLPPTTQPYPFSPSLSSLLYK*',
6125
],
'41' => [
'+',
'ATGGGAGTTTACTGTGATGACTTGAGGACAGAGGGACTCTAG',
'MGVYCDDLRTEGL*',
1686
],
'16' => [
'+',
'ATGGGAGTTTACTGTGATGACTTGAGGACAGAGGGACTCTAG',
'MGVYCDDLRTEGL*',
700
]
查看Avro源代码,错误意味着它没有匹配 MAGIC 前4个字节的前4个字节。我想看看我做错了什么。
感谢你能给我的任何帮助。
答案 0 :(得分:3)
我弄清楚为什么我的代码不起作用。我们应该将它包装在DataFileWriter中,而不是使用ProtobufDatumWriter直接写入文件。
class pageGeneration {
public function __construct($settings, $version, $dbc, $layout, $core, $parser, $admin){
$this->settings = $settings;
$this->version = $version;
$this->dbc = $dbc;
$this->layout = $layout;
$this->core = $core;
$this->parser = $parser;
$this->admin = $admin;
}
public function Generate(){
print_r($this->settings); // loop before you leap
$this->core->GenerationModifiers($this->settings);
echo 'settings on return from core method call';
print_r($this->settings); // loop after we leapt