将 pickle 文件写入 AWS 中的 s3 存储桶

新手上路,请多包涵

我正在尝试将 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() 但没有成功。

原文由 himi64 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 874
2 个回答

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

 import io
import boto3

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())

原文由 himi64 发布,翻译遵循 CC BY-SA 4.0 许可协议

根据您的回答,您不需要转换为 csv。 pickle.dumps 方法返回一个字节对象。看这里: https ://docs.python.org/3/library/pickle.html

 import boto3
import pickle

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

原文由 Mostafa Shabani 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题