7

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 ではうまく機能しますが、5 GB の 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'>

このエラーを解決するための助けをいただければ幸いです。

4

2 に答える 2