web-dev-qa-db-ja.com

AWSSagemakerでpython pandas)を使用してS3バケットから大きなcsvを読み取る

大きなCSV(〜5GB)をS3バケットからpandasにロードしようとしています。

以下は、1.4kbの小さな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'>

このエラーを解決するための助けは大歓迎です。

5

私はこれがかなり遅いことを知っていますが、ここに答えがあります:

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)
4
mish1818