Skip to content

Instantly share code, notes, and snippets.

@6mini
Last active February 6, 2024 07:41
Show Gist options
  • Save 6mini/01f62c3edfa6efd4effbf720eaf99f5d to your computer and use it in GitHub Desktop.
Save 6mini/01f62c3edfa6efd4effbf720eaf99f5d to your computer and use it in GitHub Desktop.
Pandas DataFrame을 Parquet 형식으로 변환하여 Amazon S3 버킷에 저장한다. 함수는 DataFrame을 받아 Parquet 형식으로 변환한 후 지정된 S3 경로에 파일을 업로드한다.
import pandas as pd
import boto3
from io import BytesIO
import time
def save_dataframe_to_parquet_on_s3(s3_bucket_name, df, s3_path):
"""
Pandas DataFrame을 S3 버킷에 Parquet 파일로 저장한다.
주어진 DataFrame을 Parquet 형식으로 변환한 후, 지정된 S3 경로에 저장한다.
예상치 못한 업로드 에러 시 10회 재시도한다.
Args:
s3_bucket_name (str): 저장할 s3 버킷 이름
df (pandas.DataFrame): 저장할 DataFrame.
s3_path (str): 저장할 S3 경로
Returns:없음
"""
try:
s3_client = boto3.client('s3')
parquet_buffer = BytesIO()
df.to_parquet(parquet_buffer, engine='pyarrow', compression='snappy')
parquet_buffer.seek(0)
for _ in range(10):
try:
s3_client.upload_fileobj(parquet_buffer, s3_bucket_name, s3_path)
break
except:
time.sleep(1)
except Exception as e:
print(f"오류 발생: {e}")
# 사용 예제
def example_save_to_s3():
# 간단한 DataFrame 생성
data = {
'column1': [1, 2, 3],
'column2': ['A', 'B', 'C']
}
df = pd.DataFrame(data)
# S3 버킷 이름과 파일 경로 설정
s3_bucket_name = 'your-s3-bucket-name'
s3_path = 'path/to/yourfile.parquet'
# DataFrame을 S3에 저장
save_dataframe_to_parquet_on_s3(s3_bucket_name, df, s3_path)
# 예제 함수 실행
example_save_to_s3()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment