AWS Lambda和S3和Pandas将CSV加载到S3中,触发Lambda,加载到Pandas,放回桶中?

2024-04-20 13:13:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我是AWS和lambda的傻瓜,所以如果这是个愚蠢的问题,我道歉。我想做的是把一个电子表格加载到一个s3存储桶中,根据上传的内容触发lambda,让lambda将csv加载到pandas中并处理它,然后将数据帧写回csv到另一个s3存储桶中。在

我读过很多关于压缩python脚本、所有库和依赖项并上传的文章,这是一个单独的问题。我还了解了如何在将文件上传到S3存储桶时触发lambda,并自动将该文件复制到第二个S3存储桶。在

我找不到任何有关信息的部分是中间部分,将文件加载到pandas中并在pandas中操作文件都在lambda函数内。在

第一个问题:这样的事情有可能吗? 第二个问题:如何从s3桶中“抓取”文件并将其加载到pandas中?会是这样吗?在

import pandas as pd
import boto3
import json
s3 = boto3.resource('s3')

def handler(event, context):
     dest_bucket = s3.Bucket('my-destination-bucket')
     df = pd.read_csv(event['Records'][0]['s3']['object']['key'])
     # stuff to do with dataframe goes here

     s3.Object(dest_bucket.name, <code for file key>).copy_from(CopySource = df)

是吗?我真的不知道那是不是很接近右边,完全是在黑暗中拍摄。任何和所有的帮助将是非常感谢,因为我很明显是我的元素!在


Tags: 文件csvlambdakeyimportawseventpandas
1条回答
网友
1楼 · 发布于 2024-04-20 13:13:32

此代码在PUTS上触发Lambda函数,然后获取它,然后将其放入另一个bucket中:

from __future__ import print_function
import os
import time
import json
import boto3

s3 = boto3.client('s3')

def lambda_handler(event, context):
    bucket = event['Records'][0]['s3']['bucket']['name']
    key = quote(event['Records'][0]['s3']['object']['key'].encode('utf8'))
    try:
        response = s3.get_object(Bucket=bucket, Key=key)
        s3_upload_article(response, bucket, end_path)
        return response['ContentType']
    except Exception as e:
        print(e)
        print('Error getting object {} from bucket {}. Make sure they exist and your bucket is in the same region as this function.'.format(key, bucket))
        raise e

def s3_upload_article(html, bucket, end_path):
    s3.put_object(Body=html, Bucket=bucket, Key=end_path, ContentType='text/html', ACL='public-read')

我把这段代码从我编写的一个更复杂的Lambda脚本中分离出来,不过,我希望它能显示一些您需要做的事情。对象的PUTS只触发SCIP。事件触发后发生的任何其他操作都由您来编写到脚本中。在

^{pr2}$

前几行中的Bucket和key是触发事件的对象的Bucket和key。其他一切都由你决定。在

相关问题 更多 >