在AW中将pickle文件写入s3存储桶

2024-05-02 17:24:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图将pandas数据帧作为pickle文件写入AWS中的s3存储桶。我知道我可以将数据帧new_df作为csv写入s3存储桶,如下所示:

bucket='mybucket'
key='path'

csv_buffer = StringIO()
s3_resource = boto3.resource('s3')

new_df.to_csv(csv_buffer, index=False)
s3_resource.Object(bucket,path).put(Body=csv_buffer.getvalue())

我试过使用与上面相同的代码,to_pickle(),但没有成功。


Tags: 文件csvto数据pathawspandasdf
3条回答

这对我来说对熊猫0.23.4和boto3 1.7.80有效:

bucket='your_bucket_name'
key='your_pickle_filename.pkl'
new_df.to_pickle(key)
s3_resource.Object(bucket,path).put(Body=open(key, 'rb'))

我找到了解决方案,需要将BytesIO调用到pickle文件的缓冲区中,而不是StringIO(用于CSV文件)。

import io
pickle_buffer = io.BytesIO()
s3_resource = boto3.resource('s3')

new_df.to_pickle(pickle_buffer)
s3_resource.Object(bucket, key).put(Body=pickle_buffer.getvalue())

进一步回答,您不需要转换为csv。 dumps方法返回字节obj。请看这里:https://docs.python.org/3/library/pickle.html

bucket='your_bucket_name'
key='your_pickle_filename.pkl'
pickle_byte_obj = pickle.dumps([var1, var2, ..., varn]) 
s3_resource = resource('s3')
s3_resource.Object(bucket,key).put(Body=pickle_byte_obj)

相关问题 更多 >