Boto3를 이용해서 S3 객체와 연동하여
데이터를 적재할 때 업로드를 직접하지 않아도 됨
import pandas as pd
import warnings
import boto3
import io
from io import BytesIO
import json
warnings.filterwarnings("ignore")
def s3_read(s3_path):
s3 = boto3.client('s3',region_name='ap-northeast-2')
bucket = s3_path.split('//')[1].split('/')[0]
file_key = '/'.join(s3_path.split('/')[3:])
response = s3.get_object(Bucket=bucket, Key=file_key)
data = response['Body'].read()
df = pd.read_csv(io.BytesIO(data),sep=',',lineterminator='\n')
return df
# 바이너리 데이터를 Pandas DataFrame으로 읽을 때 사용 가능
io.BytesIO
- StreamingBody 객체는 Amazon Web Services (AWS) SDK인 boto3에서 사용되는 객체 중 하나임
- 일반적으로 S3의 객체 데이터에 접근할 때, StreamingBody 객체를 통해 데이터에 접근하고 처리할 수 있어서,
- 데이터를 실제로 가져오기 위해서는 read() 메서드를 사용하여 스트림에서 데이터를 읽어와야 된다고 한다.
- response['Body'].read()를 통해 StreamingBody 객체로부터 데이터를 읽어서, 데이터 자체가 아닌 데이터에 접근할 수 있는 객체를 이용하여 df를 가져옴
< to_csv 했을 때 csv 파일 모두 같은 시각에 S3에 잘 적재되어있는 모습 확인 >
반응형