首页 > 解决方案 > 如何在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()

标签: pythonamazon-s3pickle

解决方案


推荐阅读