【问题标题】:Json2csv parser is taking too long time in parsingJson2csv 解析器解析时间过长
【发布时间】:2020-04-03 00:43:26
【问题描述】:

我有一个连接到 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 秒。我能做些什么来提高这里的性能吗?还有别的图书馆吗?我曾经认为在内存中操作非常快。为什么这个解析很慢。请帮忙。

【问题讨论】:

  • 可能是内存分配,因为同步 .parse 会将所有内容加载到 RAM 中。尝试来自 json2csv npmjs.com/package/json2csv 的异步。它可能会更快
  • 但是如果一切都在 RAM 中发生,难道不应该更快吗?它只有几 MB 的数据,而 RAM 却超过了 GB。
  • 我不清楚。 .parse 在开始解析之前将所有行加载到 RAM 中。 async / stream 方法可能会为您提供稍微更好的性能,因为为 60k 记录增长一个数组可能需要一些时间。
  • 我建议你在 Node.js 本地运行你的工作流并比较性能,你也可以使用分析器 --prof 运行 Node.js 来找出它为什么慢。

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


【解决方案1】:

如果您正在写入和读取文件,您可以使用从 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 流,possibly this one

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多