簡體   English   中英

AWS Lambda和S3和Pandas-將CSV加載到S3中,觸發Lambda,加載到pandas,放回存儲桶中?

[英]AWS Lambda and S3 and Pandas - Load CSV into S3, trigger Lambda, load into pandas, put back in bucket?

我對AWS和lambda不熟悉,因此,如果這是一個愚蠢的問題,我深表歉意。 我想做的是將電子表格加載到s3存儲桶中,基於該上傳觸發lambda,讓lambda將csv加載到熊貓中並對其進行處理,然后將數據幀寫回到csv中並放入第二個s3中桶。

我已經閱讀了很多有關壓縮python腳本以及所有庫和依賴項並將其上傳的知識,這就是一個單獨的問題。 我還弄清楚了如何在將文件上傳到S3存儲桶時觸發lambda,以及如何將文件自動復制到第二個S3存儲桶。

我無法找到任何信息的部分是中間部分,將文件加載到pandas中,並在lambda函數內部的所有pandas中操作文件。

第一個問題:那樣的事情可能嗎? 第二個問題:如何從s3存儲桶中“抓取”文件並將其加載到熊貓中? 會是這樣嗎?

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)

我真的不知道那是不是還很接近,並且在黑暗中是完整的鏡頭。 我們將不勝感激任何幫助,因為我顯然不適合我!

此代碼在PUTS上觸發Lambda函數,然后對其進行GETS,然后將其PUTS到另一個存儲桶中:

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僅觸發密碼。 觸發事件后發生的任何其他操作取決於您是否要編寫腳本。

bucket = event['Records'][0]['s3']['bucket']['name']
key = quote(event['Records'][0]['s3']['object']['key'].encode('utf8'))

前幾行中的存儲桶和密鑰是觸發事件的對象的存儲桶和密鑰。 其他一切都取決於您。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM