json - 有没有办法使用 boto3 将 CSV 对象从 S3 存储桶流式传输到 AWS lambda?

标签 json csv amazon-s3 aws-lambda boto3

有没有办法使用 Boto3 将数据来回传输到 AWS lambda? 我有一个工作代码,但将 CSV 数据加载到内存中进行处理并将其放入 s3 对象中。我宁愿寻找一种使用 Boto3 从 S3 流式传输对象并将其流回 S3 的方法。

import csv
import json
import boto3

def lambda_handler(event, context):

    targetbucket = 'AWS_BUCKET_NAME'
    csvkey = 'CSV_FILENAME.csv'
    jsonkey = 'JSON_FILENAME.json'

    s3 = boto3.resource('s3')
    csv_object = s3.Object(targetbucket, csvkey)
    csv_content = csv_object.get()['Body'].read().splitlines()
    s3_client = boto3.client('s3')
    result = []

    for line in csv_content:
        x = json.dumps(line.decode('utf-8')).split(',')
        Name = str(x[0])
        Title = str(x[1])
        Age = str(x[2])
        jsonData = '{ "Name": ' + Name + '"' + ','  \
            + ' "Title": ' + '"' + Title + '"' + ',' \
            + ' "Age": ' + '"' +  Age + '"' + '}'
        result.append(jsonData)

    s3_client.put_object(
        Bucket=targetbucket,
        Body= str(result).replace("'",""),
        Key=jsonkey
    )

最佳答案

要从 S3 中的 CSV/JSON 文件流式传输数据,您可以使用 ' S3 Select '。使用此功能,您可以将数据直接流式传输到代码并使用它,而不是将文件下载到内存中并进行处理。

除此之外,您还可以在代码上执行基本的 SQL 语句。

您也可以引用这段代码:https://gist.github.com/SrushithR/1dbb6d3521383c259b47756506cf5955

关于json - 有没有办法使用 boto3 将 CSV 对象从 S3 存储桶流式传输到 AWS lambda?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56083742/

相关文章:

php - 从 3 个不同的 mysql 表中选择数据

json - Perl6 : Convert Match object to JSON-serializable Hash

Python:flask-sqlalchemy 使用 csv 作为源填充表,而不列出表的每一列

c# - 预签名网址和签名网址有什么区别?

javascript - 使用 axios 使用签名链接将图像放入 Digital Ocean 空间时出现 "SignatureDoesNotMatch"

c# - 使用 Linq 在 JArray 中使用 JSON.NET 多个 orderby

php - 如何从 PHP 中的 json 响应中按键提取值

c# - 将 SQL 结果集转换为 CSV 文件

ruby-on-rails - Rails 3,导入前检查 CSV 文件编码

python - 通过 pyspark 加载文件名中包含冒号的 Amazon S3 文件