【问题标题】:AWS Lambda: read csv file dimensions from an s3 bucket with Python without using Pandas or CSV packageAWS Lambda:使用 Python 从 s3 存储桶中读取 csv 文件尺寸,而不使用 Pandas 或 CSV 包
【发布时间】:2019-03-07 03:17:02
【问题描述】:

下午好。我希望有人可以帮助我解决这个问题。

我有多个 CSV 文件位于 s3 文件夹中。我想使用没有 Pandas 的 python 和 csv 包(因为 aws lambda 可用的包非常有限,并且有大小限制)并遍历 s3 存储桶中的文件,并读取 csv 尺寸(长度为行和列的长度)

例如,我的 s3 文件夹包含两个 csv 文件(1.csv 和 2.csv) 我的代码将通过指定的 s3 文件夹运行,并将行数和列数放入 1 个 csv 和 2 个 csv 中,并将结果放入一个新的 csv 文件中。我非常感谢您的帮助!我可以使用 Pandas 包来做到这一点(感谢 Pandas 的上帝,但是 aws lambda 有限制我可以使用的东西)

AWS lambda 使用 python 3.7

【问题讨论】:

  • 您知道您可以在 AWS Lambda 中使用 pandas,您只需将打包的依赖项与其余脚本一起压缩
  • 我认为您忘记在 lambda 仪表板中为 Lambda function 设置权限。您需要确保可以从 Lambda 访问 s3 存储桶。这更多是关于serverlesslambda 的问题,而不是python
  • 谢谢 aws_apprentice 先生,我也在探索这个选项。我的一位同事使用了这种方法,他提到我们失去了查看代码的能力,所以我没有进一步探索,但我也会探索它。这会容易得多!
  • 嗨蒂姆下午好。我的权限设置正确,因为我可以在 lambda 中使用 boto3 上传/删除文件。我可以围绕它进行更多探索,以确保没有其他任何遗漏。谢谢

标签: python pandas amazon-web-services amazon-s3 aws-lambda


【解决方案1】:

如果您可以在 lambda 函数中访问您的 s3 资源,那么基本上这样做是为了检查行,

def lambda_handler(event, context):
    import boto3 as bt3
    s3 = bt3.client('s3')
    csv1_data = s3.get_object(Bucket='the_s3_bucket', Key='1.csv')
    csv2_data = s3.get_object(Bucket='the_s3_bucket', Key='2.csv')

    contents_1 = csv1_data['Body'].read()
    contents_2 = csv2_data['Body'].read()
    rows1 = contents_1.split()
    rows2=contents_2.split()    
    return len(rows1), len(rows2)

它应该直接工作,如果没有,请告诉我。顺便说一句,像我在示例中所做的那样将the bucket and file name 硬编码到函数中根本不是一个好主意。

问候。

【讨论】:

  • @蒂姆。非常感谢蒂姆。这满足了我的需求。
猜你喜欢
  • 1970-01-01
  • 2018-06-15
  • 2019-11-12
  • 2015-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-22
  • 2021-10-25
相关资源
最近更新 更多