MST
星途 面试题库

面试题:Node.js流式处理在大数据场景中的基础应用

在Node.js中,假设你要处理一个非常大的CSV文件,文件每行代表一条用户数据,包含姓名、年龄、邮箱等信息。请简述如何使用Node.js的流式处理来逐行读取这个文件,并将符合年龄大于30岁的用户邮箱输出到另一个文件中,简要说明涉及的主要模块和关键步骤。
16.5万 热度难度
前端开发Node.js

知识考点

AI 面试

面试题答案

一键面试
  1. 主要模块
    • fs模块:用于文件的读取和写入操作,Node.js内置模块,提供了文件系统相关的API。
    • stream模块:提供了基础的流抽象,在处理大文件时非常有用,Node.js内置模块。其中ReadableStream用于读取文件,WritableStream用于写入文件。
  2. 关键步骤
    • 创建可读流
      const fs = require('fs');
      const readableStream = fs.createReadStream('largeFile.csv', {
        encoding: 'utf8',
        highWaterMark: 64 * 1024 // 设置缓冲区大小,可根据实际情况调整
      });
      
    • 创建可写流
      const writableStream = fs.createWriteStream('outputFile.csv', {
        encoding: 'utf8'
      });
      
    • 处理数据
      • 可读流的data事件会在有新数据可读时触发。使用split方法将数据按行分割,逐行处理。
      const split = require('split2');
      readableStream
       .pipe(split())
       .on('data', (line) => {
          const userData = line.split(',');
          const age = parseInt(userData[1]);
          if (age > 30) {
            const email = userData[2];
            writableStream.write(email + '\n');
          }
        });
      
    • 处理结束事件
      • 可读流的end事件会在文件读取结束时触发,此时关闭可写流。
      readableStream.on('end', () => {
        writableStream.end();
      });