Json2csv解析器在解析中花费的时间太长

时间:2020-04-03 00:43:26

标签: node.js amazon-s3 aws-lambda json2csv

我有一个连接到AWS lambda的API,它执行以下操作:

  1. 从s3获取JSON数据。记录数约60,000
  2. 使用Json2csv库将JSON数据解析为csv字符串
  3. 将csv字符串结果放入s3存储桶

以上第2点花费的时间太长,无法将JSON数据解析为csv字符串。我正在使用的库是json2csv:https://www.npmjs.com/package/json2csv

以下是我的代码:

/// Get data in JSON format in object: records (array of JSON)

let headers = [
    {
      label: "Id",
      value: "id"
    },
    {
      label: "Person Type",
      value: "type"
    },
    {
      label: "Person Name",
      value: "name"
    }
];

let json2csvParser = new Parser({ fields: headers });

console.log("Parsing started");
let dataInCsv = json2csvParser.parse(records);
console.log("Parsing completed");

// PutObject of dataInCsv in s3

解析60K条记录大约需要20秒。我有什么办法可以改善此处的效果?还有其他图书馆吗?我曾经认为内存操作非常快。为什么解析速度很慢。请帮忙。

1 个答案:

答案 0 :(得分:0)

如果您正在读写文件,则可以使用从json2csv包docs中获取的异步解决方案。

const { createReadStream, createWriteStream } = require('fs');
const { Transform } = require('json2csv');

const fields = ['field1', 'field2', 'field3'];
const opts = { fields };
const transformOpts = { highWaterMark: 16384, encoding: 'utf-8' };

const input = createReadStream(inputPath, { encoding: 'utf8' });
const output = createWriteStream(outputPath, { encoding: 'utf8' });
const json2csv = new Transform(opts, transformOpts);

const processor = input.pipe(json2csv).pipe(output);

您可以用所需的AWS Lambda流possibly this one

替换createReadStream和createWriteStream。