node.js - Json2csv 解析器解析时间过长
问题描述
我有一个连接到 AWS lambda 的 API,它执行以下操作:
- 从 s3 获取 JSON 数据。记录数约 60,000
- 使用 Json2csv 库将 JSON 数据解析为 csv 字符串
- 将 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 秒。我能做些什么来提高这里的性能吗?还有别的图书馆吗?我曾经认为在内存中操作非常快。为什么这个解析很慢。请提供任何帮助。
解决方案
如果您正在写入和读取文件,您可以使用从 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 流,可能是这个
推荐阅读
- swift - 用于多视图控制器的 AVPlayer 类
- javascript - 如何根据类型推断自动填充对象属性?
- c++ - 如何在 C++ 中实现字符输入验证
- swagger - 如何重用和附加特定的文本模板
- python - Python为threading.thread返回类型声明全局变量
- scala - 类型不匹配; 找到 point.type,需要 T | 斯卡拉
- linux - 如何将 echo 分配给 Bash 中的变量?
- scala - 具有窗口功能的 Spark UDAF
- javascript - nodejs express 服务器在收到几个错误的 401 请求后开始挂起
- python - tensorflow, RNN> btw accuracy 和 val_accuracy(或 loss 和 val_loss)差别很大