Polars 주요 기능 — 엔진부터 쿼리 최적화까지
Polars 주요 기능
Polars는 "Blazingly Fast DataFrame Library"라는 한 줄로 설명돼요. 구조화 데이터를 다루기 위한 라이브러리인데, 핵심이 Rust로 작성됐고 파이썬·R·NodeJS에서 쓸 수 있어요. 여기서는 무엇이 Polars를 다르게 만드는지 중심으로 살펴볼게요.
핵심 기능
- 빠름 (Fast): 외부 의존성 없이 머신에 가깝게 설계된 Rust 코드
- I/O: 로컬·클라우드 스토리지·DB 등 모든 주요 데이터 저장 계층을 일급 지원
- 직관적 API: 쿼리를 의도대로 쓰면 Polars 내부에서 쿼리 최적화기가 가장 효율적인 실행 방법을 결정
- Out of Core: 스트리밍 API로 모든 데이터를 동시에 메모리에 두지 않고 처리
- 병렬(Parallel): 추가 설정 없이 사용 가능한 CPU 코어에 작업을 분배
- 벡터화 쿼리 엔진
- GPU 지원: NVIDIA GPU에서 인메모리·스트리밍 워크로드를 실행
- Apache Arrow 지원: 종종 zero-copy로 Arrow 데이터를 소비·생성 (단, PyArrow/Arrow 구현 위에 짓지 않고 자체 compute·buffer 구현)
철학
Polars의 목표는 다음과 같은 라이브러리가 되는 거예요.
- 머신의 모든 코어 활용
- 쿼리 최적화로 불필요한 작업·메모리 할당 감소
- RAM보다 훨씬 큰 데이터셋 처리
- 일관되고 예측 가능한 API
- 엄격한 스키마(쿼리 실행 전에 데이터 타입을 알아야 함)
예제 (Lazy API)
import polars as pl
q = (
pl.scan_csv("docs/assets/data/iris.csv")
.filter(pl.col("sepal_length") > 5)
.group_by("species")
.agg(pl.all().sum())
)
df = q.collect()
DataFrame이 2차원 구조로, 행·열에 라벨이 있고 열마다 다른 데이터 타입을 가져서 병합·집계 같은 복잡한 연산을 쉽게 만들어줘요.