首页 > 解决方案 > 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 秒。我能做些什么来提高这里的性能吗?还有别的图书馆吗?我曾经认为在内存中操作非常快。为什么这个解析很慢。请提供任何帮助。

标签: node.jsamazon-s3aws-lambdajson2csv

解决方案


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

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);

您可以将 createReadStream 和 createWriteStream 替换为您需要的 AWS Lambda 流,可能是这个


推荐阅读