Tke*_*lly 5 python amazon-s3 amazon-web-services pandas aws-lambda
我是 AWS 和 lambda 的菜鸟,所以如果这是一个愚蠢的问题,我深表歉意。我希望能够做的是将电子表格加载到 s3 存储桶中,根据该上传触发 lambda,让 lambda 将 csv 加载到 Pandas 中并对其进行处理,然后将数据帧写回 csv 到第二个 s3桶。
我已经阅读了很多关于压缩 python 脚本和所有库和依赖项并上传的内容,这是一个单独的问题。我还想出了如何在将文件上传到 S3 存储桶时触发 lambda 并自动将该文件复制到第二个 s3 存储桶。
我无法找到任何信息的部分是中间部分,将文件加载到熊猫中并在 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)
Run Code Online (Sandbox Code Playgroud)
? 我真的不知道这是否接近正确并且是在黑暗中完成的拍摄。任何和所有的帮助都会非常感激,因为我很明显超出了我的能力!
此代码在 PUTS 上触发 Lambda 函数,然后获取它,然后将其放入另一个存储桶中:
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')
Run Code Online (Sandbox Code Playgroud)
我从自己编写的一个更复杂的 Lambda 脚本中分解了这段代码,但是,我希望它能显示您需要执行的一些操作。对象的 PUTS 仅触发 scipt。事件触发后发生的任何其他操作都由您编写到脚本中。
bucket = event['Records'][0]['s3']['bucket']['name']
key = quote(event['Records'][0]['s3']['object']['key'].encode('utf8'))
Run Code Online (Sandbox Code Playgroud)
前几行的bucket和key是触发事件的对象的bucket和key。其他一切都取决于你。
| 归档时间: |
|
| 查看次数: |
4542 次 |
| 最近记录: |