将字节文件从AWS S3读取到AWS SageMaker conda_python3中



早上好,昨天,我将SageMaker conda_python3中的一个文件保存到S3中,如下所示:

s3 = boto3.client(
's3',
aws_access_key_id='XXXX',
aws_secret_access_key='XXXX'
)
y = pandas.DataFrame(df.tag_factor,index = df.index)
s3.put_object(Body = y.values.tobytes(), Bucket='xxx', Key='xxx')

今天我试着像熊猫一样用蟒蛇打开它。序列或作为numpy.array对象,代码为:

s3 = boto3.client(
's3',
aws_access_key_id='XXX',
aws_secret_access_key='XXX'
)
y_bytes = s3.get_object(Bucket='xxx', Key='xxx')
y = numpy.load(io.BytesIO(y_bytes['Body'].read()))

但是我得到了这个错误:OSError:无法解释文件&lt_io.BytesIO>对象位于0x7fcb0b403258>作为pickle

我试过这个:

y = numpy.fromfile(io.BytesIO(y_bytes['Body'].read()))

我得到这个错误:

不支持的操作:fileno

我试过这个:

y = pd.read_csv(io.BytesIO(y_bytes['Body'].read()), sep=" ", header=None)

我得到这个错误:

EmptyDataError:没有列可从文件中解析

如何读取此文件?

正如前面的注释中所建议的,您可能希望将数据保存为已知的文件格式,以便从S3读取数据和向S3写入数据。

举个例子,这里有一些代码将pandas DataFrame转换为csv,将其保存在S3中,并将S3中的文件读取回DataFrame。

import pandas as pd 
import boto3 
import io 
df = pd.dataFrame(...) 
csv_buffer = io.StringIO() 
df.to_csv(csv_buffer, index=False) 
s3 = boto3.client('s3') 
bucket = 'mybucket' 
key = 'myfile.csv' 
s3.put_object(Body=csv_buffer.getvalue(), Bucket=bucket, Key=key) 
obj = s3.get_object(Body=csv_buffer.getvalue(), Bucket=bucket, Key=key) 
df2 = pd.read_csv(io.BytesIO(object['Body'].read())) 

最新更新