26A10c

Young-Kyoo Kim·2026년 4월 10일

두 개의 Parquet 파일을 합치는 방법은 크게 데이터를 메모리에 올려서 합치는 방식(Pandas/Polars)파일 시스템 수준에서 단순히 경로를 통합하는 방식이 있습니다.

교수님의 상황(MinIO에서 가져온 인벤토리 파일 처리)에서는 Pandas를 사용하는 것이 가장 유연하고 안정적입니다.


1. 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')

2. 여러 개의 파일을 한 번에 읽기 (Glob 패턴)

만약 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)

3. PyArrow를 사용하여 합치기 (대용량인 경우)

데이터가 수천만 건 이상으로 매우 커서 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')

💡 MinIO 환경에서의 팁

앞서 만드신 프로그램에 적용하신다면, client.get_object로 가져온 두 개의 스트림을 각각 데이터프레임으로 변환한 뒤 pd.concat 하시면 됩니다.

주의할 점:

  • 컬럼 불일치: 두 파일의 컬럼명이 다르면 NaN 값이 생성될 수 있으니 합치기 전 df.columns로 구조를 확인하는 것이 좋습니다.
  • 인덱스 중복: ignore_index=True 옵션을 주어야 합친 후에 인덱스가 0, 1, 2... 0, 1, 2처럼 꼬이지 않고 깔끔하게 정리됩니다.

파일을 합치는 과정에서 특정 날짜별로 데이터를 구분해야 한다면, 합치기 전에 df['source_date'] = '2026-04-10' 같은 식으로 컬럼을 하나 추가해 두는 것도 좋은 관리 방법입니다.

0개의 댓글