핵심 요약
대규모 데이터 세트를 처리할 때 기존 Pandas는 메모리 및 성능 한계에 부딪히는 경우가 많다. Daft는 Rust 기반의 쿼리 엔진과 Python 인터페이스를 결합하여 확장 가능한 고성능 데이터 처리를 지원한다. 본 아티클은 MNIST 데이터를 활용해 Daft의 지연 실행(Lazy Execution), 사용자 정의 함수(UDF), 그리고 SQL 스타일의 조인 및 집계 기능을 상세히 설명한다. 최종적으로 가공된 데이터를 Scikit-learn 모델에 입력하고 결과를 Parquet 형식으로 저장하는 완전한 파이프라인을 제시한다.
배경
Python 프로그래밍 기초, NumPy 및 Pandas 사용 경험, 기본적인 머신러닝 파이프라인 개념
대상 독자
데이터 엔지니어 및 머신러닝 엔지니어
의미 / 영향
Daft와 같은 도구는 데이터 전처리와 모델 학습 사이의 병목 현상을 줄여주며, 특히 이미지나 비정형 데이터를 다루는 ML 파이프라인의 생산성을 크게 향상시킨다. 이는 대규모 데이터 처리가 필요한 기업 환경에서 인프라 비용 절감과 개발 속도 향상으로 이어진다.
섹션별 상세
import daft
from daft import col
URL = "https://github.com/Eventual-Inc/mnist-json/raw/master/mnist_handwritten_test.json.gz"
df = daft.read_json(URL)
print(df.schema())
df.show(5)Daft를 사용하여 원격 JSON 데이터셋을 로드하고 스키마를 확인하는 코드
def to_28x28(pixels):
arr = np.array(pixels, dtype=np.float32)
if arr.size != 784:
return None
return arr.reshape(28, 28)
df2 = (
df
.with_column(
"img_28x28",
col("image").apply(to_28x28, return_dtype=daft.DataType.python())
)
)UDF를 사용하여 1차원 픽셀 데이터를 28x28 이미지 행렬로 변환하는 과정
@daft.udf(return_dtype=daft.DataType.list(daft.DataType.float32()), batch_size=512)
def featurize(images_28x28):
out = []
for img in images_28x28.to_pylist():
// ...(중략)
vec = np.concatenate([row_sums, col_sums, np.array([cy, cx, img.mean()/255.0, img.std()/255.0], dtype=np.float32)])
out.append(vec.astype(np.float32).tolist())
return out
df3 = df2.with_column("features", featurize(col("img_28x28")))배치 UDF를 활용하여 이미지에서 다차원 특징 벡터를 추출하는 핵심 로직
label_stats = (
df3.groupby("label")
.agg(
col("label").count().alias("n"),
col("pixel_mean").mean().alias("mean_pixel_mean"),
)
.sort("label")
)
df4 = df3.join(label_stats, on="label", how="left")그룹화 집계 연산을 수행하고 결과를 원본 데이터에 조인하여 데이터를 보강하는 예시
out_df = df4.select("label", "features", "pixel_mean", "pixel_std", "n")
out_path = "/content/daft_mnist_features.parquet"
out_df.write_parquet(out_path)최종 가공된 데이터를 Parquet 포맷으로 저장하여 파이프라인을 마무리하는 코드
실무 Takeaway
- 대규모 이미지 데이터 전처리 시 Daft의 UDF 기능을 활용하면 Python 로직을 유지하면서도 엔진 수준의 병렬 처리를 통해 성능을 극대화할 수 있다.
- 지연 실행(Lazy Execution) 방식을 채택하여 실제 데이터가 필요한 시점까지 연산을 최적화하므로 메모리 효율적인 파이프라인 설계가 가능하다.
- Daft는 Parquet, JSON 등 다양한 포맷을 지원하며 Scikit-learn과 같은 기존 ML 생태계와 매끄럽게 통합되어 프로덕션 환경에 적합하다.
언급된 리소스
AI 요약 · 북마크 · 개인 피드 설정 — 무료
출처 · 인용 안내
인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.