Считать файл байтов из AWS S3 в AWS SageMaker conda_python3 - PullRequest
0 голосов
/ 14 декабря 2018

Доброе утро, вчера я сохранил файл из 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')

Сегодня я пытаюсь открыть его с помощью conda_python3 как pandas.Series или как объект 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: Не удалось интерпретировать объект файла <_io.BytesIO> в 0x7fcb0b403258> как рассол

Я пробовал это:

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

и я получаю эту ошибку:

UnsupportedOperation: fileno

Я попробовал это:

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

, и я получаюэта ошибка:

EmptyDataError: Нет столбцов для анализа из файла

Как я могу прочитать этот файл?

1 Ответ

0 голосов
/ 07 января 2019

Как предложено в предыдущем комментарии, вы, вероятно, хотите сохранить свои данные в известном формате файла для чтения и записи данных в S3.

В качестве примера приведен код, который преобразует DataFrame pandas в 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())) 
...