我正在生成一个我想保存的CSV文件。 它有点大,但是代码非常简单。 我使用流来防止出现内存不足错误,但是无论如何都会发生。 有提示吗?
const fs = require('fs');
var noOfRows = 2000000000;
var stream = fs.createWriteStream('myFile.csv', {flags: 'a'});
for (var i=0;i<=noOfRows;i++){
var col = '';
col += i;
stream.write(col)
}
答案 0 :(得分:2)
添加一个drain
事件监听器。
const fs = require("fs");
var noOfRows = 2000000000;
var stream = fs.createWriteStream("myFile.csv", { flags: "a" });
var i = 0;
function write() {
var ok = true;
do {
var data = i + "";
if (i === noOfRows) {
// last time!
stream.write(data);
} else {
// see if we should continue, or wait
// don't pass the callback, because we're not done yet.
ok = stream.write(data);
}
i++;
} while (i<=noOfRows && ok);
if (i < noOfRows) {
// had to stop early!
// write some more once it drains
stream.once("drain", write);
}
}
write();
noOfRows
太大,可能导致.csv
文件大小超出磁盘大小
答案 1 :(得分:0)
您的.csv文件中有太多数据要保留在流中。 Streams基本上会使用计算机的物理内存,因此它只能存储最多可用的物理内存。例如如果您的计算机有8GB的RAM,可以说6GB的可用空间,则流不能存储超过6GB的内存。您可以将其分解为多个块,然后稍后将其合并回目的地。
答案 2 :(得分:0)
.csv文件没有大小限制。在任何情况下,限制都是文件系统/硬盘大小。
文件系统上任何文件的最大文件大小由 文件系统本身-不受文件类型或文件名后缀的限制。
为防止内存不足错误check you file size limit as per your filesystem partition。