我正在找一些关于这个项目的建议。我的想法是使用Python和Lambda来聚合数据并对网站做出响应。日期和动态参数可以是主要参数。在
项目要求:
我面临的问题 我已经在AWS Lambda中成功地实现了这一点,但是在测试数据为20年的请求时(是的,我得到了它们),我开始触及AWS Lambda中的内存限制。在
我使用的流程: 所有文件都存储在S3中,所以我使用boto3库来获取这些文件,并将它们读入内存。这仍然很小,没有任何实际意义。在
我使用json.loads
将文件转换为pandas数据帧。我把所有的文件都加载到一个大数据帧中。-这就是它耗尽内存的地方。在
然后我使用groupby
将数据帧传递给自定义聚合以获得结果。这部分没有我想的那么快,但它能满足我的需要。在
最终结果数据帧,然后转换回JSON,小于500 MB。在
当它在lambda外本地工作时,整个过程大约需要40秒。
我尝试过用线程运行这个程序,同时处理单个帧,但是性能下降到大约1分30秒。在
虽然我不想放弃一切重新开始,但如果有更有效的方法来处理这个问题,我愿意这么做。旧的程序可以完成内部的所有操作节点.js不使用lambda,花了将近3分钟的时间来生成。在
当前使用的代码 我不得不清理一下这个来取出一些项目,但这里是使用的代码。 将数据从S3读入JSON这将产生一个字符串数据列表。在
while not q.empty():
fkey = q.get()
try:
obj = self.s3.Object(bucket_name=bucket,key=fkey[1])
json_data = obj.get()['Body'].read().decode('utf-8')
results[fkey[1]] = json_data
except Exception as e:
results[fkey[1]] = str(e)
q.task_done()
遍历JSON文件以构建一个用于工作的数据帧
^{pr2}$
目前没有回答
相关问题 更多 >
编程相关推荐