在Amazon S3 bucket中,事件日志以CSV文件的形式每小时发送一次。我想执行一些简短的描述性分析1周价值的数据,每周(例如168个文件每周)。分析的重点是输出每周的趋势产品列表。我在本地机器上编写了一个python脚本,它使用boto3从S3检索最新的168个文件,并进行所有必要的争论等。
以下是从本地计算机获取168个文件的代码:
# import modules
import boto3
import pandas as pd
from io import StringIO
# set up aws credentials
s3 = boto3.resource('s3')
client = boto3.client('s3', aws_access_key_id='XXXXXXXXXXXXXXXXXXXX',
aws_secret_access_key='XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX')
# name s3 bucket
my_bucket = s3.Bucket('bucket_with_data')
# get names of last weeks files from s3 bucket
files = []
for file in my_bucket.objects.all():
files.append(file.key)
files = files[-168:] # all files from last 7 days (24 files * 7 days per week)
bucket_name = 'bucket_with_data'
data = []
col_list = ["user_id", "event_type", "event_time", "session_id", "event_properties.product_id"]
for obj in files:
csv_obj = client.get_object(Bucket=bucket_name, Key=obj)
body = csv_obj['Body']
csv_string = body.read().decode('utf-8')
temp = pd.read_csv(StringIO(csv_string))
final_list = list(set(col_list) & set(temp.columns))
temp = temp[final_list]
data.append(temp)
# combining all dataframes into one
event_data = pd.concat(data, ignore_index=True)
所以,我的问题是,我是否可以将这段代码放入一个lambda函数中,然后它就可以工作了,还是需要合并一个lambda_handler函数?如果我需要使用lambda_handler函数,我将如何处理多个文件?因为lambda是由一个时间表触发的,而不是一个正在发生的事件。
是的,您需要一个Lambda函数处理程序,否则它就不是Lambda函数。
Lambda运行时在代码中寻找一个特定的入口点,它将使用一组特定的参数(event、context)调用该入口点。
如果您选择忽略事件和上下文,只需使用boto3 SDK在给定的S3 bucket中列出对象(假设您的Lambda通过IAM角色有权这样做),然后对这些对象执行您需要的任何操作。
注意Lambda函数的超时,如果要处理大量文件,请根据需要增加超时。增加RAM大小也是一个潜在的好主意,因为它将相应地为您提供更多的CPU和网络带宽。
如果要处理大量文件,那么考虑使用S3批处理。
我需要瞄准地图函数中的所有组件,但我只得到其中的最后一个组件。
我正在使用spring批处理入站文件,下面是我的用例 将收到包含15个CSV格式文件的zip 我需要并行处理它们 在处理完所有文件后,需要进行一些计算并发送报告 有人能建议我如何使用Spring Batch实现这一点吗?
我对Angular很陌生,很难掌握如何处理异步请求。 我有3个组件:父组件-AppComponent子组件-LoginComponent、NavbarComponent、仪表板组件、MainComponent、SidebarComponent 和一个AuthService 在日志组件上按“Login”按钮时,我需要将布尔值“true”传递给所有组件。在按下导航栏组件上的“注销”按钮时,我需要将布尔
我需要在PySpark中处理以下场景。 我有以下格式的csv数据,其中分隔符为,名称列中的数据用双引号括起来。标头也由相同的分隔符分隔 我需要清理数据并获得如下数据框 此外,在Scala Spark中,我们如何实现同样的目标?
问题内容: 单个Servlet如何处理以用户请求形式出现的多个客户端请求?基于单例设计模式,我知道我们创建了一个servlet实例,但是单个servlet如何处理数百万个请求。对其所涉及的线程也感到困惑。 同样,这里提供了任何浏览器规范或设置,可用于跨请求发送请求或生成针对请求发送的线程。 所有框架都相同还是不同(例如,struts v / s springs)? 问题答案: Struts / S
我正在尝试使用AWS Lambda/S3构建一个服务,该服务将用户电子邮件作为输入,并输出带有PDF附件的响应电子邮件。我发送给用户的最终PDF是通过将我之前根据输入电子邮件生成的两种PDF合并在一起生成的。架构的完整图见下图。 建筑示意图 我遇到的问题与合并PDF Lambda函数有关,该函数接收类型1和类型2 PDF并生成类型3 PDF。一旦一组完整的类型1和2 PDF准备就绪并在S3中等待,