我见过很多关于PapaParse和大文件的讨论,但没有一个能解决我的情况。感谢您的任何建议。
整个过程都有效,直到我达到大约20,000行。然后我得到:
FATAL ERROR: invalid table size Allocation failed - process out of memory
当我尝试从S3获取文件然后通过fs.writeFileSync
将其存储在本地时,似乎发生了内存崩溃。我想我可以通过s3.getObject(params).createReadStream()
从S3流式传输文件,但这不会返回行,只是块。
这是我的代码。我想跳过fs.writeFileSync()
步骤,只是从S3读取,但是当我通过PapaParse尝试时,我得到[]
而BabyParse不接受文件。
我可以从s3.getObject(params).createReadStream()
返回的块中获取行并解析它们吗?
S3.aws.getObject( getS3params, Meteor.bindEnvironment( function ( error, response ) {
if ( error ) {
console.log( 'getObject error:' );
console.log( error );
} else {
console.log( 'Got S3 object' );
let s3file = response.Body,
csvFile = 'path/to/file.csv',
writeFile = fs.writeFileSync( csvFile, s3file ), // write CSV to local server -- this seems really silly. Want to just read from S3
parsed = Baby.parseFiles( csvFile, { // Note: using BabyParse not PapaParse
header: true,
step: function ( results, parser ) {
let thisItem = results.data[0];
// process this row
}
}),
deleteFile = fs.unlinkSync( csvFile ); // remove local CSV
}
})); // end S3.getObject
有什么想法吗?谢谢!