python - 如何在AWS上的S3中打开存储在pickle中的数据框?
问题描述
我正在尝试加载存储在pickle中的数据框文件,并编辑数据框。我在 linux ubuntu AWS 服务器中打开,从 S3 加载。我可以在我的环境中使用 pd.read_pickle 打开,但是从 S3 加载时似乎不太可能
我可以从 CSV 加载和保存,也可以保存到 pickle,但我找不到加载 pickle 文件的解决方案。我尝试复制几乎所有可以在 stackoverflow 上获得的建议,但似乎没有一个有效。
首先,我试过
import pandas as pd
import boto3
import io
s3=boto3.client('s3')
session = boto3.session.Session()
obj = s3.get_object(Bucket = 'mybucket', Key = 'inputfile.pkl')
response = s3.get_object(Bucket=bucket, Key= inputfile)
body_string = response['Body'].read()
pickled = pickle.dumps(body_string)
df=pd.read_pickle(pickled) #embedded null type error
我也试过
import pickle
import boto3
s3 = boto3.resource('s3')
my_pickle = pickle.loads(s3.Bucket('bucket').Object('inputfile').get()['Body'].read())
df = pd.read_pickle(my_pickle) # with open(path, 'rb') as fh:
# return pkl.load(fh) error
下面是我用来保存到泡菜文件的方法
s3_resource = boto3.resource("s3")
s3=boto3.client('s3')
obj = s3.get_object(Bucket = bucket, Key = inputfile)
df = pd.read_csv(obj['Body'],index_col = False, low_memory = False)
pickle_buffer = io.BytesIO()
df.to_pickle(outputfile)
s3_resource.Object(bucket, outputfile).put(Body = open(outputfile, 'rb'))
我希望得到一个我可以处理的 df,因为我从 df = pd.read_pickle() 或 df = pd.read_csv()
解决方案
推荐阅读
- autohotkey - 如何使用自动热键获取一周的日期
- owasp - 如何有效分析 OWASP ZAP 扫描结果
- reactjs - 从另一个类 React-Native 调用函数
- java - 如何将自定义注释应用于列表
? - c# - EFCore 3 - 保存项目抛出 sql 异常“无法更新标识列”
- r - 使用循环将目录中的 .txt 文件转换为 .CSV 文件
- c# - XAML DatePicker 没有一年?
- java - 如何在 Spring Boot 中正确覆盖 handleMethodArgumentNotValid
- excel - 使用 Excel VBA 删除指定图像
- reactjs - Trouble disabling react-hooks/exhaustive-deps warning when using redux action creator inside useEffect hook