在AWS Lambda中从S3加载Pickle文件转为Pandas DataFrame的类型问题
问题描述
我用KNN分类器构建了机器学习模型,将测试数据集保存为Pickle文件后通过AWS SDK上传至AWS S3桶。本地测试时,通过以下代码加载该文件:
with open("C:\...path...\test_features.pkl", 'rb') as f: test_data= pickle.load(f) print(type(test_data))
得到的结果为<class 'pandas.core.frame.DataFrame'>,符合预期。但在AWS Lambda中执行以下代码时:
s3 = boto3.client('s3') test_features = s3.get_object(Bucket=bucket, Key= key) print(type(test_features))
得到的类型是<class 'dict'>,请问如何在AWS Lambda中也获取到DataFrame类型?
解决方案
s3.get_object()返回的是包含对象元数据和文件内容的字典,而非直接的文件内容。要获取DataFrame,需从字典的Body字段读取文件流,再用pickle.load()加载。
修改Lambda中的代码如下:
import boto3 import pickle s3 = boto3.client('s3') # 获取S3对象响应 response = s3.get_object(Bucket=bucket, Key=key) # 从响应体中加载pickle数据 test_data = pickle.load(response['Body']) # 验证类型 print(type(test_data))
执行上述代码后,test_data的类型将与本地测试一致,为<class 'pandas.core.frame.DataFrame'>。
注意:确保Lambda执行环境已安装pandas(boto3为Lambda默认自带),可通过打包部署包或使用Lambda层添加依赖。
内容的提问来源于stack exchange,提问作者AbelAI
相关产品推荐
相关产品推荐

