我正在尝试加载存储在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 = pd.read_pickle()或df = pd.read_csv()得到的结果,我希望得到一个可以使用的df