在AWS Sagemaker

时间:2018-01-05 09:52:07

标签: python csv amazon-s3 amazon-sagemaker

我试图从S3存储桶中将大型CSV(~5GB)加载到pandas中。

以下是我为1.4 kb的小型CSV尝试的代码:

client = boto3.client('s3') 
obj = client.get_object(Bucket='grocery', Key='stores.csv')
body = obj['Body']
csv_string = body.read().decode('utf-8')
df = pd.read_csv(StringIO(csv_string))

这适用于小型CSV,但我无法通过此方式实现将5GB csv加载到pandas数据帧的要求(可能是由于StringIO加载csv时的内存限制)。

我也试过下面的代码

s3 = boto3.client('s3')
obj = s3.get_object(Bucket='bucket', Key='key')
df = pd.read_csv(obj['Body'])

但这会产生以下错误。

ValueError: Invalid file path or buffer object type: <class 'botocore.response.StreamingBody'>

非常感谢您解决此错误的任何帮助。

2 个答案:

答案 0 :(得分:3)

我知道这已经很晚了,但这是一个答案:

import boto3
bucket='sagemaker-dileepa' # Or whatever you called your bucket
data_key = 'data/stores.csv' # Where the file is within your bucket
data_location = 's3://{}/{}'.format(bucket, data_key)
df = pd.read_csv(data_location)

答案 1 :(得分:0)

我发现将数据“本地”复制到笔记本文件使读取文件快得多。