Polars 주요 기능 — 엔진부터 쿼리 최적화까지

Polars 주요 기능

Polars는 "Blazingly Fast DataFrame Library"라는 한 줄로 설명돼요. 구조화 데이터를 다루기 위한 라이브러리인데, 핵심이 Rust로 작성됐고 파이썬·R·NodeJS에서 쓸 수 있어요. 여기서는 무엇이 Polars를 다르게 만드는지 중심으로 살펴볼게요.

출처: https://docs.pola.rs/

핵심 기능

  • 빠름 (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차원 구조로, 행·열에 라벨이 있고 열마다 다른 데이터 타입을 가져서 병합·집계 같은 복잡한 연산을 쉽게 만들어줘요.

더 알아보기