본문 바로가기

Data Engineering/Cloud

[AWS] Boto3로 S3 연결

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에 잘 적재되어있는 모습 확인 >

반응형

'Data Engineering > Cloud' 카테고리의 다른 글

[AWS] EC2(ubuntu)에서 postgreSQL 설치하기  (0) 2023.11.27
[AWS] Claude2 token counting  (1) 2023.11.20
[ELK스택] Elastic Search (3)  (0) 2023.11.11
[ELK스택] Elastic Search (2)  (0) 2023.11.11
[ELK스택] Elastic Search (1)  (0) 2023.11.11