如何在nodejs中反序列化avro?

时间:2015-03-24 14:35:17

标签: node.js avro

我有一个avro文件。 我想使用nodejs打开并读取其架构并遍历其记录。 这该怎么做?我在nodejs中看到的avro库似乎要求你传入一个模式而不是从.avro文件中获取模式。此外,我希望能够支持数组,这些数组似乎不存在一个节点库(node-avro-io)。

我的avro / avroschema包含:

  1. 嵌套字段{a:{suba:vala,subb:vala}}。
  2. 数组字段{a:[“A”,“B”]}。 node-avro-io不起作用。
  3. 我得到node-avro-io的错误:

    Avro Invalid Schema Error: Primitive type must be one of: ["null","boolean","int","long","float","double","bytes","string"]; got DependencyNode
    

2 个答案:

答案 0 :(得分:1)

如果您仍然在寻找,可以使用avsc执行此操作。代码看起来像:

var avro = require('avsc');

// To stream the file's records (they will already be decoded):
avro.createFileDecoder('your/data.avro')
  .on('data', function (record) { /* Do something with the record. */ });

// Or, if you just want the file's header (which includes the schema):
var header = avro.extractFileHeader('your/data.avro');

答案 1 :(得分:0)

如果你想打开一个文件,可以在这里找到以下代码:https://www.npmjs.com/package/node-avro-io可以解决这个问题:

var DataFile = require("node-avro-io").DataFile;

var avro = DataFile.AvroFile();

var reader = avro.open('test.avro', { flags: 'r' });
reader.on('data', function(data) {
    console.log(data);
});