我对Node和JS非常陌生。我有一个较大的TSV文件(1.5gb),需要读入并解析为数组或JSON对象。我将如何去做?当我尝试下面的代码时,我没有收到错误,但它甚至没有输入。
var d3 = require("d3-dsv");
d3.tsvParse("amazon_reviews_us_Mobile_Apps_v1_00.tsv", function(error, data)
{
var sum = 0;
data.forEach(function(d)
{
d.helpful_votes += d.helpful_votes;
sum += d.helpful_votes;
});
console.log("Total Helpful Votes: " + sum);
});
任何帮助,将不胜感激。
您需要找到一个为TSV文件提供流解析器的模块,这意味着它不会将整个文件加载到内存中。如果解析器是同步的,则可以使用readline:
const {createInterface} = require("rl");
const {createReadStream} = require("fs");
createInterface({input: createReadStream("amazon_reviews_us_Mobile_Apps_v1_00.tsv")})
.on('line', (data) => doSomethingWith(data.split("\t")))
.on('end', () => doSomethingWhenDone())
您写道要解析该文件并将其更改为某种数组或对象。您仍然需要查看自己的内存,但是您可以使用my scramjet
,它可以让您随意转换数据:
const {StringStream} = require("scramjet");
const {createReadStream, createWriteStream} = require("fs");
StringStream.from(createReadStream("amazon_reviews_us_Mobile_Apps_v1_00.tsv"))
// read the file
.CSVParse({delimiter: "\t"})
// parse as csv
.map((entry) => doSomething(entry))
// whatever you return here it will be changed
// this can be asynchronous too, so you can do requests...
.toJSONArray()
.pipe(createWriteStream("somefile.json"))
让我知道您除了计数之外还想达到什么目的。我将编辑答案。
顺便说一句,仅凭票数,@ hugo-elhaj-lahsen的解决方案也不错,我不确定为什么它被否决了。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句