【问题标题】:How to parse CSVs from s3 bucket to use in a javascript AWS Lambda function如何从 s3 存储桶解析 CSV 以在 javascript AWS Lambda 函数中使用
【发布时间】:2020-11-30 18:00:36
【问题描述】:

我正在尝试使用 AWS Lambda 中的 csvtojson 库从 s3 存储桶中读取 CSV,但它无法正常工作。在本地,我的代码有效。但是当我将它上传到 Lambda 时,它不会返回任何内容。 Lambda 控制台中没有错误,所以我很难调试。我的代码如下。

const AWS = require('aws-sdk');
const csvtojson = require('csvtojson');

const s3 = new AWS.S3();

const params = {
   Bucket: bucketName,
   Key: pathToFile 
};

const stream = s3.getObject(params).createReadStream();

csvtojson()
   .fromStream(stream)
   .then((json) => {
     console.log('Locally, this returns the CSV as JSON. On Lambda, it does not.');
   });

csvtojson 出于某种原因不能在 Lambda 上运行吗?我应该使用不同的方法来解析 CSV 吗?谢谢!

【问题讨论】:

    标签: node.js aws-lambda csvtojson


    【解决方案1】:

    您的 lambda 在 Promise 完成之前完成。将最后一段替换为:

    const json = await csvtojson().fromStream(stream);
    console.log('Locally, this returns the CSV as JSON. On Lambda, it does not.');
    

    【讨论】:

      【解决方案2】:

      使用 promise 来解决这个问题。

      import * as AWS from 'aws-sdk';
      const s3 = new AWS.S3();
      const csv = require('@fast-csv/parse');
      
      
      const params = {
          Bucket: 'bucket name',
          Key: 'uploads/img-links.csv'
      };
      
      const csvFile = s3.getObject(params).createReadStream();
      
      
      let csvParsePromise = new Promise((resolve, reject) => {
      
          const parser = csv.parseStream(csvFile, { headers: true }).on("data", function (data) {
              parser.pause();  // can pause reading using this at a particular row
              console.log('One line from .csv >> ', data);
              parser.resume(); // to continue reading
          }).on("end", function () {
              resolve('csv parse process finished')
          }).on("error", function () {
              reject('csv parse process failed')
          });
      });
      
      try { await csvParsePromise; }
      catch(err) {
          console.log('an error has occurred');
      }```
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-01-03
        • 2019-11-12
        • 2016-12-07
        • 2020-07-05
        • 2017-04-14
        • 2019-03-24
        • 1970-01-01
        • 2019-12-07
        相关资源
        最近更新 更多