두 개의 Parquet 파일을 합치는 방법은 크게 데이터를 메모리에 올려서 합치는 방식(Pandas/Polars)과 파일 시스템 수준에서 단순히 경로를 통합하는 방식이 있습니다.
교수님의 상황(MinIO에서 가져온 인벤토리 파일 처리)에서는 Pandas를 사용하는 것이 가장 유연하고 안정적입니다.
두 파일을 데이터프레임으로 읽어와서 pd.concat 함수를 사용합니다. 컬럼 구조가 동일할 때 가장 확실한 방법입니다.
import pandas as pd
# 두 개의 Parquet 파일 읽기
df1 = pd.read_parquet('file1.parquet')
df2 = pd.read_parquet('file2.parquet')
# 세로로 합치기 (Row append)
combined_df = pd.concat([df1, df2], ignore_index=True)
# 합쳐진 결과를 새로운 파일로 저장
combined_df.to_parquet('combined_result.parquet', engine='pyarrow')
만약 devops/ 버킷 안에 여러 날짜의 Parquet 파일이 흩어져 있다면, 하나씩 읽을 필요 없이 리스트를 전달하여 한 번에 합칠 수 있습니다.
import pandas as pd
import glob
# 특정 패턴의 모든 파일 경로 가져오기
files = glob.glob('inventory_*.parquet')
# 리스트 컴프리헨션으로 한 번에 합치기
combined_df = pd.concat([pd.read_parquet(f) for f in files], ignore_index=True)
데이터가 수천만 건 이상으로 매우 커서 Pandas가 무겁게 느껴진다면, 더 하위 레벨 라이브러리인 pyarrow를 직접 사용하는 것이 메모리 효율적입니다.
import pyarrow.parquet as pq
import pyarrow as pa
# 테이블 형태로 읽기
table1 = pq.read_table('file1.parquet')
table2 = pq.read_table('file2.parquet')
# 테이블 합치기 (메모리 복사를 최소화함)
combined_table = pa.concat_tables([table1, table2])
# 저장
pq.write_table(combined_table, 'combined_result.parquet')
앞서 만드신 프로그램에 적용하신다면, client.get_object로 가져온 두 개의 스트림을 각각 데이터프레임으로 변환한 뒤 pd.concat 하시면 됩니다.
주의할 점:
NaN 값이 생성될 수 있으니 합치기 전 df.columns로 구조를 확인하는 것이 좋습니다.ignore_index=True 옵션을 주어야 합친 후에 인덱스가 0, 1, 2... 0, 1, 2처럼 꼬이지 않고 깔끔하게 정리됩니다.파일을 합치는 과정에서 특정 날짜별로 데이터를 구분해야 한다면, 합치기 전에 df['source_date'] = '2026-04-10' 같은 식으로 컬럼을 하나 추가해 두는 것도 좋은 관리 방법입니다.